我目前的设置:
我打算使用UISegmentedControl在我想要在tableview中显示的数据之间切换。 我一直在使用restkit进行webservice的所有restful交互。数据存储在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的委托方法。
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[self.locationsTableView reloadData];
}
我的逻辑是每个切换都应触发根据已传递的值设置NSFetchedResultsController的方法。我可以在日志中清楚地看到我从Web服务中获取值并正在缓存,但tableview从不填充。
答案 0 :(得分:3)
您没有更改数据,因此您无法收到通知。
使用self.fetchedResultsController执行提取时,您已经拥有了所有对象。
在mainManagedObjectContext或其子ManagedObjectContext中插入/更新/删除时,您可以收到委托的回调
你应该这样做
[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];
在委托回调
时保持逻辑