我有一个使用两个实体的核心数据的应用:System
和Owner
。每个System
都有一个Owner
,每个Owner
都可以拥有System
个JSON
许多GET
个对象。两个对象都是从远程Owner
Feed中相互独立收集的。我GET
所有System
个对象并使用Core Data将其加载到磁盘,然后Owner.createInManagedObjectContext(self.managedObjectContext!, ownerID: reducedID, fName: fName, lName: lName)
将所有System
个对象加载到磁盘并将 加载到磁盘使用核心数据。
这样的事情:
Owner
并且类似于class Owner: NSManagedObject {
@NSManaged var firstName: String
@NSManaged var lastName: String
@NSManaged var id: String
class func createInManagedObjectContext(moc: NSManagedObjectContext, ownerID: String, fName: String, lName: String) -> Owner {
let newOwner = NSEntityDescription.insertNewObjectForEntityForName("Owner", inManagedObjectContext: moc) as Owner
newOwner.id = ownerID
newOwner.firstName = fName
newOwner.lastName = lName
moc.save(nil)
return newOwner
}
}
个对象。
我的System
课程如下(自动生成)
class System: NSManagedObject {
@NSManaged var cid: String
@NSManaged var name: String
@NSManaged var addy: String
@NSManaged var rn: NSNumber
@NSManaged var rnGroup: String
@NSManaged var lng: String
@NSManaged var lat: String
@NSManaged var owner: Owner
@NSManaged var state: NSNumber
class func createInManagedObjectContext(moc: NSManagedObjectContext, sysCID: String, sysName: String, sysAddy: String, sysRN: Int, sysRNGroup: String, sysLat: String, sysLng: String) -> System {
// more code...
并且Owner
对象看起来像这样(部分自动生成):
System
我无法同时创建这些对象,因为System
JSON Feed可能与Owner
JSON Feed同时不可用。
我的问题是,在所有对象存储到磁盘后,如何使用代码设置此{{1}}< - {{1}}关系?
答案 0 :(得分:1)
这不可能更直观:
system.owner = owner;
其中第一个owner
是关系名称,第二个是检索到的所有者对象。
BTW:看看你的模型文件,你似乎忘记了从所有者到系统的反向关系。也许您在完成模型设计之前生成了托管对象子类。
另外,我建议为id
属性使用不同的名称 - 我认为" id"是一个保留字,这可能会导致可怕的错误。
如果您需要先获取所有者,请使用谓词执行此操作,例如基于id
(我将称之为ownerID
),执行类似
var request = NSFetchRequest(entityName:"Owner")
request.predicate = NSPredicate(format:"ownerID = %@", ownerIDString)
let result = context.executeFetchRequest(request, error:nil)! as [Owner]
if countElements(result) == 1 {
let owner = result[0]!
system.owner = owner
}