关系的 NSFetchedResultsController 委托回调
Posted
技术标签:
【中文标题】关系的 NSFetchedResultsController 委托回调【英文标题】:NSFetchedResultsController delegate callback for relationship 【发布时间】:2013-12-11 15:08:50 【问题描述】:假设你有两个实体,一个是People
,另一个是Location
。 Location
具有属性 name
,People
与名为 location
的 Location
具有一对一关系。
那么如果你有一个像下面这样的NSFetchedResultsController
,当你改变Location
s name
时你不能得到委托回调。
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"People"
inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];
// Edit the sort key as appropriate.
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"location.name"
ascending:NO];
NSArray *sortDescriptors = @[sortDescriptor];
[fetchRequest setSortDescriptors:sortDescriptors];
NSFetchedResultsController *aFetchedResultsController =
[[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:self.managedObjectContext
sectionNameKeyPath:@"location.name"
cacheName:@"Master"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
我知道我可以获取Location
实体,然后通过name
对其进行过滤以解决此问题。但我对此很好奇,NSFetchedResultsController
委托是否只会在实体关系发生变化时通知您,而不是关系的属性。
谁能给我一些关于这个功能的帖子。我搜索了网络和 Apple 的文档,但找不到合理的描述。
【问题讨论】:
【参考方案1】:
NSFetchedResultsController
代理是否只是在实体关系发生更改时通知您,而不是关系的属性。
没错。因为关系的变化是 FRC 正在观察的对象的变化。但是,在关系的另一端,其中一个对象的属性发生变化时不会通知委托,因为 FRC 没有观察到这些对象。
【讨论】:
感谢您的编辑。是否有任何帖子更详细地解释了这个主题,我在苹果的文档中找不到任何内容。因为您可以使用@"location.name" 之类的方式对获取结果进行分组,但是如果name
中有任何更改,就会出错。这让新人惊喜。
或者有没有什么书解释过这个功能。我有一本关于 Core Data 的书,给我看一些简单的演示。以上是关于关系的 NSFetchedResultsController 委托回调的主要内容,如果未能解决你的问题,请参考以下文章
又一个 NSInternalInconsistencyException,但使用 NSFetchedResultsController
NSFetchedresultscontroller 与 tableview 插入新部分崩溃
NSFetchedResultsController:具有相同键的两个排序描述符不起作用。一个降序用于部分,另一个升序用于行