假设您有两个实体,一个是People
,另一个是Location
。 Location
有一个属性name
,People
与名为Location
的{{1}}有一对一的关系。
如果您有location
,如果您更改了NSFetchedResultsController
s Location
,则无法获得代理回调。
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
代表是否只是在实体关系中发生变化时通知您,而不是关系的属性。
任何人都可以给我一些关于此功能的帖子。我搜索网络和Apple的文档,但找不到合理的描述。
答案 0 :(得分:2)
NSFetchedResultsController
委托只是在实体关系中发生变化时通知您,而不是关系的属性。
完全。因为关系的变化是FRC正在观察的对象的变化。但是,关系另一端的其中一个对象的属性更改将不会通知给委托,因为FRC没有观察到这些对象。