J'ai travaillé avec CoreData pour l'une de mes applications iOS et j'ai voulu créer une fonction d'assistance pour transformer une représentation String
d'une entité CoreData en une instance NSManagedObject
de cette entité. Je viens de terminer mon premier cours Swift pour mon commandant et, d'après ce que je comprends, je suppose que la logique/implémentation est assez simple. Je crois que ma mise en œuvre est mauvaise parce que Swift est mon nouveau langage de programmation. J'essaie d'éviter de coder en dur une solution parce que mon intuition me dit qu'il y a une meilleure façon plus générale d'atteindre mon objectif.CoreData: conversion d'une chaîne en instance NSManagedObject
Exemple (Naïf pseudocode):
func getEntity(from string: String) -> NSManagedObject {
return string as! NSManagedObject
}
exécution souhaitée:
let stringRep = "Entity"
entity(from: stringRep)
Entity
Contexte:
Deux des entités CoreData avec lesquels je travaille sont Category
et Service
.
public class Category: NSManagedObject { }
public class Service: NSManagedObject { }
Category
contient une relation à de nombreuses entités Service
et mes autres fonctions d'aide à l'accès AppService
CoreData à l'aide de cette relation.
CategoryTableViewController
a trois cellules statiques, chacune contenant une représentation String
des entités pour Category
.
Je passe la représentation String
sélectionnée d'une entité telle que Service
pendant prepare(for segue: UIStoryboardSegue, sender: Any?)
à l'autre UIViewController
avec un UITableView
. En utilisant la nouvelle fonction d'aide, je serai en mesure d'extraire de façon ambiguë de CoreData la représentation String
et afficher les données dans le UITableView
.
Mon but ultime est de couper les fonctions inutiles dans AppService
avec la fonction ci-dessous.
func get(_ entities: String, for category: Category) -> NSFetchedResultsController<T> {
let someEntity = getEntity(from: entities)
let fetchRequest: NSFetchRequest<someEntity> = someEntity.fetchRequest()
fetchRequest.predicate = NSPredicate(format: "category == %@", category)
fetchRequest.sortDescriptors = [NSSortDescriptor(key: "name", ascending: true)]
return createFetchedResultsController(for: fetchRequest)
}
Exemple:
get("Service", for: category)
Vous ne pouvez pas le faire parce que 'ne sont pas liés CHAINE' et' NSManagedObject'. Et NSManagedObject n'est pas une entité. – vadian
Je l'ai clarifié. C'est exactement comme ça que j'écris un pseudocode pour Swift à cause de la sémantique du langage. –