Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.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/6/haskell/8.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错误(对多个关系)_Ios_Xcode_Core Data_Bundle_Accessor - Fatal编程技术网

Ios 向核心数据添加记录时发生NSSet错误(对多个关系)

Ios 向核心数据添加记录时发生NSSet错误(对多个关系),ios,xcode,core-data,bundle,accessor,Ios,Xcode,Core Data,Bundle,Accessor,好吧,我对iOS还是个新手,对一些事情感到困惑。 首先,这里是我的实体。。。 我已经在那里的数据智慧是一个水果(苹果)和一个来源(树)。它们都保存在数据库中 接下来,我想添加一个橙色,但与“Tree”有关系。这就是我正在使用的: Fruit *fruit = (Fruit *)[NSEntityDescription insertNewObjectForEntityForName:@"Fruit" inManagedObjectContext:managedObjectContext]

好吧,我对iOS还是个新手,对一些事情感到困惑。 首先,这里是我的实体。。。

我已经在那里的数据智慧是一个水果(苹果)和一个来源(树)。它们都保存在数据库中

接下来,我想添加一个橙色,但与“Tree”有关系。这就是我正在使用的:

    Fruit *fruit = (Fruit *)[NSEntityDescription insertNewObjectForEntityForName:@"Fruit" inManagedObjectContext:managedObjectContext];
    fruit.fruitName = @"Orange";
  NSSet *test = [NSSet setWithObject:fruit];
    [_source addSourceFruit:test];

NSLog(@"4");

fruit.fruitSource = _source;
(_source是“Tree”,我在数组中对源实体执行了“Tree”的提取请求,然后获取objectAtIndex:0(Tree)并将其分配给指向源实体的点

   data = [managedObjectContext executeFetchRequest:request error:&error];


   Source *_source = [data objectAtIndex:0];
以及访问器方法:

- (void)addSourceFruitObject:(Fruit *)value;
- (void)removeSourceFruitObject:(Fruit *)value;
- (void)addSourceFruit:(NSSet *)values;
- (void)removeSourceFruit:(NSSet *)values;
我已经找到了一个关于bundle的答案,但我不能完全确定它们。 我读过这本书,但我似乎没有很好地理解它

编辑:错误是

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[NSSet intersectsSet:]: set argument is not an NSSet'
*** First throw call stack:

我相信你替换了
sourceFruit
集合,这会混淆核心数据。核心数据保持反向关系。这意味着你只需设置
fruit.fruitSource=\u source;
就可以理解对象是如何连接的。你可以使用
[\u source addSourceFruitObject:fruit]
取而代之的是,但这对我来说似乎不够简洁


(旁白:避免对局部变量使用
\u name
命名方式是一个好主意。对于支持属性的实例变量,使用这种形式已经成为一种标准。)

Ok,因此通过移除NSSet(NSSet*test=[NSSet setWithObject:fruit];[\u source addSourceFruit:test];)现在它抛出了“保存问题:操作无法完成(Cocoa错误1570)”,这意味着某些内容为空/nil,但我不确定是什么。抱歉,伙计,我不知道我是如何在这样一个网站上登陆的哈哈!我无法从我看到的情况判断这可能是什么。而不是记录
@“4”
您可以打印
\u source
fruit
的值,看看是否有任何线索。这…
sourceFruit=“0x25fdf0”
…是说sourceFruit是一个单一的对象,而不是一个集合。我猜您将关系从“到一”转换为“到多”在模型中,但没有重新生成您的Fruit/Source.h/.m文件。集合与单个对象之间存在一些混淆,但我不确定是什么。您能否将另一个日志语句放在与前一个日志语句大致相同的位置:
NSLog(@“sourceFruit class:%@,[Source.sourceFruit class])
?是的,对不起……我对使用下划线有心理障碍。:-)嗯,你肯定已经确认了这个问题。如果我在一个测试项目中做同样的事情,我会得到,“
sourceFruit类:\NSFaultingMutableSet
”。我很想干净利落地完成一个项目,然后从设备或模拟器中删除这个应用程序,看看一个全新的构建/安装是否会改变什么。如果没有,我不知道该说什么;问题现在很明显,但原因不是。