向核心数据添加记录时的NSSet错误(多对多关系)

时间:2012-12-10 10:26:42

标签: ios xcode core-data bundle accessor

好的,所以我对iOS仍然很陌生并且对一些事情感到困惑。 首先,这是我的实体...... E.R.D

我已经拥有的数据明智的是Fruit(Apple)和Source(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',我在Source实体上对'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;

我找到了一个与捆绑有关的答案,但我对它们并不完全确定。 我已经读过这个'https://developer.apple.com/library/mac/#documentation/CoreFOundation/Conceptual/CFBundles/AboutBundles/AboutBundles.html'和'https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CoreData/Articles/cdAccessorMethods.html',但我似乎并没有把它精彩地抓住它。

编辑:错误是

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

1 个答案:

答案 0 :(得分:3)

我相信您通过替换sourceFruit集来混淆Core Data。核心数据维持反向关系。这意味着您只需为其设置fruit.fruitSource = _source;即可了解对象的连接方式。您可以使用[_source addSourceFruitObject:fruit]; 代替,但这似乎不那么简洁。

(旁白:避免对局部变量使用_name命名方式是一个好主意。使用该形式作为支持属性的实例变量已成为一种标准。)