我注意到我的应用程序出现问题是因为在 viewDidLoad
之前调用了 UITableView
的 Datasource 方法。
问题是 UITableView
没有正确的行数,它从 NSFetchedResultsController
而不是 performFetch
的“函数”在 viewDidLoad
方法中调用,由于某种原因,该方法在数据源方法之后调用。
下面是两个重要方法的来源:
- (void)viewDidLoad {
[super viewDidLoad];
self.tableView.allowsSelectionDuringEditing = NO;
self.tableView.editing = YES;
self.title = [NSString stringWithFormat:@"%@", [[game valueForKey:@"title"] description]];
NSError *error = nil;
if (![[self fetchedResultsController] performFetch:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
id <NSFetchedResultsSectionInfo> sectionInfo = [[fetchedResultsController sections] objectAtIndex:section];
return [sectionInfo numberOfObjects];
}
如何解决这个问题?
最佳答案
正常的程序流程要求在任何 UITableView
数据源方法之前调用 -viewDidLoad
。如果您以相反的顺序获取它们,那么您的代码库中有某些东西导致它们被乱序调用。
首先,在您在此问题中显示的两个方法中放置一个断点,并确认它们被乱序调用。
然后,当您处于 -tableView:numberOfRowsInSection:
断点时,查看堆栈跟踪并查看为什么它在 -viewDidLoad< 之前被调用
.
更新
如链接中所示,-viewDidLoad 最先被调用。当您在该堆栈跟踪中选择 [PlayerViewController -viewDidLoad]
行时,它位于哪一行代码?如果它位于 [super viewDidLoad]
上,那么您的父类(super class)是什么?它在做什么 -viewDidLoad
?
关于iphone - 核心数据 - 在 viewDidLoad 之前调用数据源方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484024/