Core data 在插入了核心数据的父级和子级之后,是否在代码中设置关系?
我有一个应用程序,它使用两个实体的核心数据:Core data 在插入了核心数据的父级和子级之后,是否在代码中设置关系?,core-data,swift,Core Data,Swift,我有一个应用程序,它使用两个实体的核心数据:System和Owner。每个系统都有一个所有者,每个所有者可以“拥有”多个系统对象。这两个对象都是从一个相互独立的远程JSON提要收集的。我获取所有所有者对象并使用核心数据将其加载到磁盘,然后我获取所有系统对象并使用核心数据将其加载到磁盘 大概是这样的: Owner.createInManagedObjectContext(self.managedObjectContext!, ownerID: reducedID, fName: fName, lN
System
和Owner
。每个系统
都有一个所有者
,每个所有者
可以“拥有”多个系统
对象。这两个对象都是从一个相互独立的远程JSON
提要收集的。我获取
所有所有者
对象并使用核心数据将其加载到磁盘,然后我获取
所有系统
对象并使用核心数据将其加载到磁盘
大概是这样的:
Owner.createInManagedObjectContext(self.managedObjectContext!, ownerID: reducedID, fName: fName, lName: lName)
对于系统
对象也是如此
我的Owner
类看起来像这样(自动生成)
系统
对象如下所示(部分自动生成):
我无法同时创建这些对象,因为Owner
JSON提要可能无法与System
JSON提要同时使用
我的问题是,如何设置这个
系统
,它再直观不过了:
system.owner = owner;
其中第一个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
}
嗯,我知道这就像
system.owner=owner
一样简单,但我想我的问题更多的是关于检索第二个owner
。我是否执行fetchRequest
,然后将该结果分配给系统所有者
?类似于fetchRequest=*插入代码*as?所有者
,然后分配给系统。所有者?是的,完全正确。获取所有者
(带有描述唯一属性的谓词,如名称或id)并如上所示分配给系统。感谢您的说明和代码示例(这与我所拥有的内容非常接近,但并不因此而混淆)。我选择id
作为属性名,你说得对。糟糕的状态!
system.owner = owner;
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
}