核心数据fetchedObjects data = nil,最后一个条目除外

时间:2015-05-15 23:21:04

标签: ios objective-c sqlite core-data

我最近决定我的Core Data商店变得非常混乱所以我决定删除它。在这里搜索我使用以下代码删除我的数据

NSManagedObjectContext *context = [self managedObjectContext];
NSError *error;
NSFetchRequest * allData = [[NSFetchRequest alloc] init];
[allData setEntity:[NSEntityDescription entityForName:@"TimeLineItem" inManagedObjectContext:context]];
[allData setIncludesPropertyValues:NO]; //only fetch the managedObjectID

NSArray * datas = [context executeFetchRequest:allData error:&error];
//error handling goes here
for (NSManagedObject * data in datas) {
    [context deleteObject:data];
}
NSError *saveError = nil;
[context save:&saveError];

一切都很好。然后我注释掉删除代码并打开以下代码在商店中创建占位符数据,并查看数据(在这种情况下,我刚创建的数据)

    NSManagedObjectContext *context = [self managedObjectContext];
TimeLineItem *timeLineItem = [NSEntityDescription
                                  insertNewObjectForEntityForName:@"TimeLineItem"
                                  inManagedObjectContext:context];
timeLineItem.locationName = @"Test Bank2";
timeLineItem.date = [NSDate date];
NSError *error;
if (![context save:&error]) {
    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
}

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"TimeLineItem"
                                          inManagedObjectContext:context];
[fetchRequest setEntity:entity];
NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
for (TimeLineItem *info in fetchedObjects) {
    NSLog(@"loc: %@", info.locationName);
    NSLog(@"Date: %@", info.date);
}

仍然没有问题。然而,在下一次运行时,假设我已经离开虚拟数据输入线,只有最后一个(刚刚创建的最新虚拟数据)返回为非零。参见附图(假设只有2个取物而不是6个作为对象[0] - [3]都与[4] - nil相同)。

nil fetched objects

我也直接查看了sqlite数据库,数据一切正常:

sqlite data view

在发布后从sqlite数据库中读取数据时,是否有人可以了解我的数据发生了什么?

1 个答案:

答案 0 :(得分:0)

令您烦恼的nil属性只显示在调试器中,因为尚未提取详细信息。如果您遍历结果并记录特定属性,例如locationName,您会看到它就在那里。