2014-09-06 67 views
0

我非常迷恋这个,但很可能我误解了有关Core Data的一些信息。核心数据对多关系集计数不会更新,直到应用程序重新启动

我有2个管理对象:BagItem。他们都有“多对多”的直接和反向关系。

所以,我通过从我的Bag类中调用addItemsObject:来添加ItemBag

现在我想看看有多少Bag对象具有Item,所以我做:

// in my Bag implementation: 
- (void)didChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects 
{ 
    Item *myItem = [inObjects anyObject]; // for simplicity, but this is returning my added Item for sure. 
    NSInteger count = myItem.bags.count; 
    NSLog(@"%@ is in %li bags", myItem.name, (long)count); 
    // keeps on giving me "0 bag" 
} 

谁能告诉我这是怎么回事?谢谢。

回答

0

首先,您没有(也不应该)实现KVC访问器- (void)didChangeValueForKey:(NSString *)inKey withSetMutation:(NSKeyValueSetMutationKind)inMutationKind usingObjects:(NSSet *)inObjects。核心数据生成访问器将为您实现。

覆盖此方法可能是您的问题的一部分。您将注意到documentation for this method says

您不能重写此方法。

您可以使用其他机制(例如KVO)来通知此属性的更改。

+0

覆盖该方法是强烈不鼓励,但它并没有那么糟糕..你实际上只需要手动更新多集属性,但我仍然将你的答案标记为正确的〜谢谢! – believesInSanta 2014-09-07 06:00:28

+0

不,是的。您应该*不*覆盖该方法。核心数据的关系错误行为取决于它以特定的方式工作 - 这就是为什么当重写它时,这对你来说是打破了。 – quellish 2014-09-07 06:02:47

+0

我明白你的意思了。谢谢。 – believesInSanta 2014-09-07 06:19:53

相关问题