Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Core data 在插入了核心数据的父级和子级之后,是否在代码中设置关系?_Core Data_Swift - Fatal编程技术网

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
}