【问题标题】:Core Data, executeFetchRequest return 1 object, haven't saved anything核心数据,executeFetchRequest 返回 1 个对象,没有保存任何东西
【发布时间】:2013-12-09 23:29:26
【问题描述】:

当我在我的表视图控制器中调用 fetchQuery 方法时,它返回了一个具有空属性的对象,但我还没有保存任何东西。事实上,我刚刚清理了我的 xcode 缓存和 IOS 模拟器。这是我的 fetchQuery 方法:

在我看来DidLoad

NSMutableArray *people = [[NSMutableArray alloc] init];

在我看来WillAppear

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)

有人知道怎么回事吗?

截图说明:

  • 日期:出生日期
  • 数字:行数
  • 日期和数字之间的空白区域:应该是 NSString firstName

【问题讨论】:

  • 你能发布控制台日志的输出吗?
  • people 数组可变有什么原因吗?
  • 你能多放点 sn-p 吗?
  • 试试这样 NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:context]; NSLog(@"%@",[NSString stringWithFormat:@"%@ %@", [newDevice valueForKey:@"MyattributeName1"], [newDevice valueForKey:@"MyattributeName2"]]])
  • @FelixLam:原因是因为用户可以将人员添加到人员上,我调用了 [self.table reload] 方法来重新加载表格单元格。

标签: ios core-data xcode5 nsfetchrequest


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-06-08
    • 1970-01-01
    • 2015-02-11
    • 2012-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多