gpt4 book ai didi

core-data - 在父级和子级都插入核心数据后,在代码中设置关系吗?

转载 作者:行者123 更新时间:2023-11-30 10:20:14 25 4
gpt4 key购买 nike

我有一个应用程序,它使用具有两个实体的核心数据:SystemOwner。每个System都有一个Owner,并且每个Owner可以“拥有”许多System对象。这两个对象都是从远程 JSON feed 中独立收集的。我GET所有Owner对象并使用Core Data将它们加载到磁盘,然后我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 JSON feed 可能无法与 System JSON feed 同时可用。

我的问题是,在所有对象都存储到磁盘后,如何使用代码设置此System<-Owner关系?

最佳答案

再直观不过了:

system.owner = owner;

其中第一个所有者是关系名称,第二个是检索到的所有者对象。

顺便说一句:看看你的模型文件,你似乎忘记了所有者到系统的反比关系。也许您在完成模型设计之前生成了托管对象子类。

此外,我建议对 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
}

关于core-data - 在父级和子级都插入核心数据后,在代码中设置关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27139047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com