Ios 除最后一个条目外,核心数据fetchedObjects Data=nil
我最近决定我的核心数据存储变得非常混乱,所以我决定删除它。在这里搜索时,我使用以下代码删除了我的数据Ios 除最后一个条目外,核心数据fetchedObjects Data=nil,ios,objective-c,sqlite,core-data,Ios,Objective C,Sqlite,Core Data,我最近决定我的核心数据存储变得非常混乱,所以我决定删除它。在这里搜索时,我使用以下代码删除了我的数据 NSManagedObjectContext *context = [self managedObjectContext]; NSError *error; NSFetchRequest * allData = [[NSFetchRequest alloc] init]; [allData setEntity:[NSEntityDescription entityForName:@"TimeLi
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];
一切都很好。然后,我注释掉了删除代码,并打开了以下代码以在存储中创建占位符数据,并查看数据(在本例中,是我刚刚创建的)
还是没有问题。但是,在下一次运行时,假设我保留了虚拟数据输入行,只有最后一个(刚刚创建的最新虚拟数据)返回为非nil。请参阅所附图片(假设只有2个提取的对象,而不是6个,因为对象[0]-[3]与[4]-nil都相同)
我还直接查看了sqlite数据库,数据都很好:
在接下来的发布中,当我的数据从sqlite数据库中读取时,有人能说明我的数据发生了什么吗 使您恼火的
nil
属性只是显示在调试器中,因为尚未获取详细信息。如果您反复查看您的结果和特定于日志的属性,例如,locationName
,您将看到它们都在那里。当您说特定于日志的属性时,这与我上面所做的NSLog有什么不同?这是因为核心数据总是在后台进行优化。它将获取绝对最小值,并仅在必要时填空。这就是所谓的。
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);
}