Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/112.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.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
Ios 核心数据:设置NSSet Swift_Ios_Xcode_Swift_Core Data - Fatal编程技术网

Ios 核心数据:设置NSSet Swift

Ios 核心数据:设置NSSet Swift,ios,xcode,swift,core-data,Ios,Xcode,Swift,Core Data,因此,我有以下实体: class Person: NSManagedObject { @NSManaged var name: String @NSManaged var dogs: NSSet } class Dog: NSManagedObject { @NSManaged var name: String @NSManaged var owner: NSManagedObject } 我想我一定试过五种不同的方法来设置狗NSSet和主人NSManagedObjec

因此,我有以下实体:

class Person: NSManagedObject {
  @NSManaged var name: String
  @NSManaged var dogs: NSSet 
}  

class Dog: NSManagedObject {
  @NSManaged var name: String
  @NSManaged var owner: NSManagedObject
}
我想我一定试过五种不同的方法来设置狗NSSet和主人NSManagedObject,但都没有运气

self.mutableSetValueForKey("dogs").addObject(newDog)
正在崩溃并引发“由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“***-[NSSet INTERSESSET:]:set参数不是NSSet”

我尝试了这两种选择:

var newDogs = [newDog]
var setOfDogs = NSSet(array: newDogs) as Set<NSObject>    
self.dogs.setByAddingObjectsFromSet(setOfDogs)
self.dogs.setByAddingObjectsFromArray(newDogs)
var newDogs=[newDog]
var setOfDogs=NSSet(数组:newDogs)作为集合
self.dogs.setByAddingObjectsFromSet(集合日志)
self.dogs.setByAddingObjectsFromArray(新狗)
它们都没有抛出和异常,但self.dogs在使用其中一个/两个后为空

另外,当设置dog.owner时,我该如何做?我知道有些方法是dog.owner.setValue(Value,Key),但我不确定值和Key指的是什么,文档也没有太大的帮助


我知道这里有一些类似的问题,但它们似乎都在Obj-C中,我很难理解它们。任何建议,谢谢

首先,如果子类
NSManagedObject
,则应使用以下子类:

@NSManaged var owner : Person
其次,您不必关心在一对多关系中设置
NSSet
的复杂性。相反,只需设置为一个关系

dog.owner = person
let items = self.mutableSetValueForKey("dogs")
items.addObject(newDog)
就这样

最后,以下是如何设置/修改
NSSet
,以供将来参考。当你有一个多对多的关系时,这是必要的

dog.owner = person
let items = self.mutableSetValueForKey("dogs")
items.addObject(newDog)

您可以通过向
NSManagedObject
子类添加方便的方法来简化此过程。

为什么不使用“mutableCopy”?只是为了避免可能的编译错误,您不需要副本。您不应该试图欺骗编译器,而是让它帮助您编写可靠、高效和经济的代码。这会使我的应用程序崩溃:[[u SwiftValue entity]:发送到的无法识别的选择器instance@BrandonA尝试转到不太可能发生此类错误的Swift。