核心数据,executeFetchRequest返回1个对象,尚未保存任何内容

时间:2013-11-25 10:24:04

标签: ios core-data xcode5 nsfetchrequest

当我在表视图控制器中调用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)

有谁知道发生了什么事?

截图说明:

  • 日期:DOB
  • 数字:行数
  • 日期和数字之间的空白区域:应为NSString firstName

enter image description here

1 个答案:

答案 0 :(得分:0)

正如已经指出的那样,你应该使用NSFetchedResultsController。了解它的最佳方法是查看Apple的模板:创建一个新项目,选择“Master / Detail”并选中“Core Data”。

在主视图控制器中,您将看到延迟加载的获取结果控制器的实现,以及所有委托回调(如果数据库发生更改,这将自动更新表视图)。

至于您的迷路对象 - 很可能是在某个地方创建的,可能是在启动数据库时。但是,您应该检查其他表视图数据源方法。如果是这些返回每个部分一行count,您的单元格实现可能会导致此空Person个对象。

检查实际存储内容的一种方法是启动sqlite3命令行工具并检查文档目录中的sqlite文件。