gpt4 book ai didi

ios - NSFetchedResultsControllerDelegate 方法不会被调用

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:30:56 26 4
gpt4 key购买 nike

我的 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);
}];
}

最佳答案

您不需要将 NSFetchedResultsController 的创建包装在 MagicalRecord 中的 saveWithBlock: 中,因为您实际上只是在获取对象,不改变它们。

我确实理解你为什么这样做(为了获得本地 NSManagedObjectContext)

MagicalRecord 有一个不需要您传递 NSManagedObjectContext 的便捷方法:

+ (NSFetchedResultsController *) MR_fetchAllGroupedBy:(NSString *)group withPredicate:(NSPredicate *)searchTerm sortedBy:(NSString *)sortTerm ascending:(BOOL)ascending;

这将在执行期间使用您所在的当前线程的上下文,因此如果您没有做任何太复杂的事情,例如在线程之间切换和管理不同的上下文,您应该没问题。

这样,您的方法应该能够立即返回一个 NSFetchedResultsController,而无需使用 block 。

此外,您似乎正在设置 delegate 两次,一次在 block 内,一次作为参数传递给 MR_fetchAllGroupedBy:..

最后,确保您新创建的 NSFetchedResultsController 不是 nil,并在与您的 相同的类中实现其中一个 delegate 方法>viewWillAppear:,然后使用断点/日志来查看它们是否被调用:

- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
NSLog(@"objects: %@", controller.fetchedObjects);
}

关于ios - NSFetchedResultsControllerDelegate 方法不会被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37593830/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com