我一直在为我的一个iOS应用程序使用CoreData,并希望构建一个帮助函数,将CoreData实体的String
表示形式转换为该实体的NSManagedObject
实例。我刚刚为我的专业完成了我的第一个Swift课程,根据我的理解,我认为逻辑/实现非常简单。我相信我的实现是错误的,因为Swift是我最新的编程语言。我试图避免对解决方案进行硬编码,因为我的直觉告诉我有更好,更通用的方法来实现我的目标。
示例(NaïvePseudocode):
func getEntity(from string: String) -> NSManagedObject {
return string as! NSManagedObject
}
期望的执行:
let stringRep = "Entity"
entity(from: stringRep)
Entity
上下文:
我正在使用的两个CoreData实体是Category
和Service
。
public class Category: NSManagedObject { }
public class Service: NSManagedObject { }
Category
包含与许多Service
实体的关系,以及AppService
中使用该关系访问CoreData的其他帮助函数。
CategoryTableViewController
有三个静态单元格,每个单元格包含String
实体的Category
表示。
我将String
期间Service
等实体的选定prepare(for segue: UIStoryboardSegue, sender: Any?)
表示传递给UIViewController
的下一个UITableView
。
使用新的辅助函数,我可以使用String
表示从CoreData中模糊地获取,并在UITableView
中显示数据。
我的最终目标是使用以下功能在AppService
中删除不必要的功能。
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)
}
示例:
get("Service", for: category)
答案 0 :(得分:1)
您可以根据实体名称创建某个实体的新对象。与往常一样,您将需要托管对象上下文。
首先,你必须得到NSEntityDescription
:
let entity = NSEntityDescription.entity(forEntityName: "Widget", in: context)
然后你可以创建对象:
let newWidget = NSManagedObject(entity: entity, in: context)
但是,使用子类会好得多。它自动包含实体信息。
let newWidget = Widget(context: context) // much easier
答案 1 :(得分:0)
以这种方式不可能......
1,假设有一个实体名称为&#34; Person&#34;,因为你有一个属性为&#34; name&#34;
2,通过fetch查询获得类似xx12145ac的NSManagedObject 要么 创建一个新的NSManagedobject of person
3,一旦你拥有Person类型的对象,你就可以设置
myPersonObj.name =&#34; SomeOne&#34;如!串
我希望能帮到你!!!
如果您遇到任何问题,请告诉我.. :)