我在viewWillAppear方法中有这个
[RPCoreData
getFetchedControllerForCategoryDiscoverDelegate:self completion:^(NSFetchedResultsController *controller) {
self.fetchedResultController = controller;
self.fetchedResultController.delegate = self;
}];
这在我的CoreData.m
中+ (void)
getFetchedControllerForCategoryDiscoverDelegate:(id<NSFetchedResultsControllerDelegate>)delegate
completion:(void (^)(NSFetchedResultsController *controller))
completion {
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
NSFetchedResultsController *controller = [ItemData MR_fetchAllGroupedBy:@"category.id"
withPredicate:nil
sortedBy:@"category.id"
ascending:NO
delegate:delegate
inContext:localContext];
completion(controller);
}];
}
答案 0 :(得分:2)
您不需要在NSFetchedResultsController
的{{1}}周围创建saveWithBlock:
,因为您实际上只是抓取对象而不是更改它们。
我明白为什么你这样做(为了获得本地MagicalRecord
)
NSManagedObjectContext
有一种方便的方法,不需要你传递MagicalRecord
:
NSManagedObjectContext
这将使用您在执行期间所处当前线程的上下文,因此如果您没有做任何过于复杂的事情,例如在线程之间切换和管理不同的上下文,那么您应该没问题。
这样,您的方法应该能够立即返回+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending;
,而不使用块。
此外,您似乎要设置NSFetchedResultsController
两次,一次在块内,一次作为参数传递给delegate
最后,确保新创建的MR_fetchAllGroupedBy:..
不是NSFetchedResultsController
,并在与nil
相同的类中实施delegate
个方法之一,然后使用断点/日志记录看看他们是否被召唤:
viewWillAppear:
答案 1 :(得分:0)
在ViewDidLoad中添加以下行
id delegate = [[UIApplication sharedApplication] delegate];
self.managedObjectContext = [delegate managedObjectContext];