gpt4 book ai didi

ios - NSFetchedResultsController 没有触发 controllerDidChangeContent

转载 作者:行者123 更新时间:2023-12-01 18:55:15 24 4
gpt4 key购买 nike

我目前的设置:

我打算使用 UISegmentedControl 在我想在表格 View 中显示的数据之间切换。
我一直在使用 restkit 进行与 web 服务的所有安静交互。数据存储在 coredata sqlite 存储中。我以以下方式设置了 NSFetchedResultsController 。

-(void)setupFetchedResultsControllerWithFetchRequest:(NSFetchRequest *)fetchRequest{

self.fetchedResultsController=nil;

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"address" ascending:YES];
fetchRequest.sortDescriptors = @[descriptor];
NSError *error = nil;
// Setup fetched results
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:[RKManagedObjectStore defaultStore].mainQueueManagedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
[self.fetchedResultsController setDelegate:self];
BOOL fetchSuccessful = [self.fetchedResultsController performFetch:&error];
// NSAssert([[self.fetchedResultsController fetchedObjects] count], @"Seeding didn't work...");
if (! fetchSuccessful) {
ShowAlertWithError(error);
}

}

这就是我编写获取请求以传递到 fetchedresultscontroller 的方式。
-(NSFetchRequest *)prepareFetchRequestForGlobalAtm{

NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"AtmBranches"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"branchType='0'"];
[fetchRequest setPredicate:predicate];
return fetchRequest;

}

我已经在 segmentedControlToggledMethod 中将它们适本地结合在一起。
[self setupFetchedResultsControllerWithFetchRequest:[self prepareFetchRequestForGlobalAtm]];

//Restkit Call
[self loadGlobalAtms];

这是我的 NSFetchedResultsController 的委托(delegate)方法。
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.locationsTableView reloadData];
}

我的逻辑是,每个切换都应该根据已传递的值触发设置 NSFetchedResultsController 的方法。我可以在日志中清楚地看到我有来自 web 服务的值并且正在被缓存,但是 tableview 永远不会自行填充。

最佳答案

您尚未更改数据,因此您无法收到通知。

当您使用 self.fetchedResultsController 执行Fetch 时,您已经获得了所有对象。

当您在 mainManagedObjectContext 或其子 ManagedObjectContext 中插入/更新/删除时,您可以收到委托(delegate)的回调

你应该这样做

[self.fetchedResultsController setDelegate:self];
BOOL fetchSuccessful = [self.fetchedResultsController performFetch:&error];
// NSAssert([[self.fetchedResultsController fetchedObjects] count], @"Seeding didn't work...");
if (! fetchSuccessful) {
ShowAlertWithError(error);
}
[self.locationsTableView reloadData];

并保持委托(delegate)回调时的逻辑

关于ios - NSFetchedResultsController 没有触发 controllerDidChangeContent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27793907/

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