我已将 NSFetchtedResultsController 指定为属性...
@property (nonatomic, strong) NSFetchedResultsController *controller;
...并将代表设置为我的班级。
self.controller.delegate = self;
然后我实现了标题中提到的方法并在其中放置了一个断点。
- (void)controller:(NSFetchedResultsController *)controller
didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath
forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath
{
=> BREAKPOINT <=
}
我为控制器创建了获取请求,如下所示:
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Post"];
// ... some sort ...
self.controller = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:self.context
sectionNameKeyPath:nil
cacheName:@"cache"];
现在我将一些“Post”类型的 NSManagedObjects 存储在另一个类中,但从未调用过didChangeObject
该方法(我的断点在其中)。
有谁知道出了什么问题?
更新 #1:从服务器获取一些帖子并将其存储到上下文中的类使用 GCD 异步执行。
更新#2:我以另一种方式尝试过,因为在多线程环境中使用上下文不起作用。(感谢 svena)现在ServerConnection
在异步块中运行(使用 GCD)并在主线程上执行选择器。此选择器方法将帖子存储在数据库中,并且应该更新 tableview。基本上,我认为当我在这种情况下存储一些东西时,didChangeObject
应该自动调用该方法吗?但事实并非如此。:-/
我添加了一个简短的序列图来说明我当前的状态。 有谁知道为什么这不起作用?请耐心等待。我是 CoreData 和 Objective-C 的新手。:)