ski*_*atg 5 core-data objective-c uitableview nsfetchedresultscontroller ios
设置:带FRC的UITableView.行是简单的文本内容列表,用户可以通过刷新来获取最新的内容.
我看到奇怪的行为,其中多次为每行调用cellForRow.所以我看到0,0 0,1 0,2 0,3(可见行),但这4行都有多次调用cellForRow.但是第一次查看列表时,它们会被调用一次.第二次,两次,等等.第7次,在用户看到内容之后,在幕后,它继续尝试并反复配置单元并最终崩溃.
因此,如果您访问任何内容列表,它会访问服务器,下载故事,创建NSMO和显示.在日志中,我看到configureCell为每个可见行调用一次.如果我刷新,我看到同样的.但是,如果我导航到另一个屏幕,然后回来,当我拉动刷新时,我注意到每行调用两次cellforrow.如果我继续这个离开和回来的过程,每次我做的时候,cellforrow被称为额外的时间.记录一些获取的结果控制器委托方法,我在每组cellforrow调用之前看到willchangecontent.有人可以帮我确定为什么我的cellforrow方法被称为越来越多次?
一个想法是我建立FRC的方式.我遵循像CoreDataBooks这样的代码并将事情移到了viewdidload,但仍然看到了问题.
我在.h和.m中有一个属性我认为是标准设置:
- (NSFetchedResultsController *)fetchedResultsController
{
//NSLog(@"fetchedresulscontroller");
if (_fetchedResultsController != nil)
{
return _fetchedResultsController;
}
// initialize fetch request. setup predicate, sort, etc.
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:@"date" cacheName:nil];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
// perform actual fetch. delegate methods take it from here
NSError *fetchError = nil;
if (![self.fetchedResultsController performFetch:&fetchError])
{
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog(@"Unresolved error %@, %@", fetchError, [fetchError userInfo]);
abort();
}
return _fetchedResultsController;
}
Run Code Online (Sandbox Code Playgroud)
安德鲁建造者走在正确的道路上。这一切都与 FRC 有关,但诀窍是用于菜单的第三方 SWReveal 库。结果,我每次都创建一个新的 VC(之前的 VC 没有释放),并且 FRC 正在查看所有实时视图控制器。因此,每次我从菜单中点击一个选项时,就会添加另一个选项,并为此调用配置调用。
解决方案是将 viewwilldisappear 中的 FRC delegate 清空,并将其设置在 viewwillappear 中
| 归档时间: |
|
| 查看次数: |
290 次 |
| 最近记录: |