当我在表视图控制器中调用fetchQuery方法时,它返回了一个具有null属性的对象,但我还没有保存任何东西。事实上,我刚刚清理了我的xcode缓存和IOS模拟器。这是我的fetchQuery方法:
在我的viewDidLoad
中NSMutableArray *people = [[NSMutableArray alloc] init];
在我的viewWillAppear
中NSManagedObjectContext *context = [self managedObjectContext];
NSFetchRequest *request = [[NSFetchRequest alloc] initWithEntityName:@"Person"];
self.people = [[context executeFetchRequest:request error:nil] mutableCopy];
[self.table reloadData];
的cellForRowAtIndexPath
Person *temp = ((Person*)[people objectAtIndex:indexPath.row]);
PersonCell *cell = [tableView dequeueReusableCellWithIdentifier:@"personCell"];
if (cell == nil) {
cell = [[PersonCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"personCell"];
}
[cell setPersonDetails:temp]; // just assigning label value, had double checked, it works.
return cell;
这种奇怪的行为会破坏numberOfRowsInSection计数,这会导致在cellForRowAtIndexPath中导致以下异常的额外计数:
Thread 1: EXC_BAD_ACCESS(code=1, address=0x10)
有谁知道发生了什么事?
截图说明:
答案 0 :(得分:0)
正如已经指出的那样,你应该使用NSFetchedResultsController。了解它的最佳方法是查看Apple的模板:创建一个新项目,选择“Master / Detail”并选中“Core Data”。
在主视图控制器中,您将看到延迟加载的获取结果控制器的实现,以及所有委托回调(如果数据库发生更改,这将自动更新表视图)。
至于您的迷路对象 - 很可能是在某个地方创建的,可能是在启动数据库时。但是,您应该检查其他表视图数据源方法。如果是这些返回每个部分一行count
,您的单元格实现可能会导致此空Person
个对象。
检查实际存储内容的一种方法是启动sqlite3
命令行工具并检查文档目录中的sqlite文件。