好的,这就是我的设置:
对象模型:
* Category object is at the root
* Product is linked to a Category (many-to-1)
* ShoppingItem is linked to a Product (many-to-1)
应用程序设置:
我的应用程序在根目录下有一个TabBarController,在每个选项卡的根目录下都有一个tableviewcontroller。
情景:
当查看对节和行信息的更改时,两个tableview控制器的设置方式与NSFRCDelegate通知的方式相同。
有关这里发生的事情的任何线索?这种行为是否正确?
P.S。 :Am @ work并且无法发布代码片段。可以回家做,如果这会有所帮助。
答案 0 :(得分:0)
缓存可能会导致临时问题,但如果您对上下文进行更改,则应自动刷新缓存。您可以通过在视图控制器的viewWillAppear
方法中删除FRC缓存来测试此问题。这样当你回到视图时,它每次都以新的缓存开始。
我认为您更有可能拥有两个不同的托管对象上下文。您有一个Product
表的上下文,另一个由Change-view
和ShoppingItems
表共享。
如果ShoppingItems
表和更改视图共享上下文,则更改视图中所做的任何更改都将自动显示在ShoppingItems
表中,但更改将不会显示在“购物项目”表中除非您合并上下文的更改。
如果几乎必须是单独的上下文,因为ShoppingItems
只能通过遍历Product
之间的关系来获取其类别名称。如果ShoppingItems
显示正确的类别,但Product
必须表示每个表正在访问每个Product
对象的不同版本。
答案 1 :(得分:0)
奇怪的问题,至少可以说。当使用超过2个级别的部分名称密钥路径时,NSFetchedResultsController是否会收到有关部分更改的通知?
您可以尝试以下解决方法来检查这一点:
将一个名为“categoryName”的只读属性添加到您的ShoppingItem类中,具有以下实现:
- (NSString *)categoryName {
return self.Product.Category.Name;
}
然后,将以下方法添加到ShoppingItem实现中:
+ (NSSet *)keyPathsForValuesAffectingCategoryName {
return [NSSet setWithObjects:@"Product.Category.Name", nil];
}
这将确保每次类别名称更改时,KVO系统还将触发categoryName的更改通知,因此希望通知NSFRC更改。当然,使用categoryName作为NSFRC的sectionNameKeyPath。
让我知道这是否有效。
答案 2 :(得分:0)
尝试为不同的配置使用不同的缓存名称(即不同的排序或谓词) - 它应该能够返回正确的数据。它起作用了。