Core Data fetchedObjects data = nil 除了最后一个条目
Posted
技术标签:
【中文标题】Core Data fetchedObjects data = nil 除了最后一个条目【英文标题】:Core Data fetchedObjects data = nil except for last entry 【发布时间】:2015-05-15 23:21:03 【问题描述】:我最近发现我的 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];
一切顺利。然后我把删除代码注释掉,打开下面的代码在store中创建一个占位符数据,并查看数据(本例中是我刚刚创建的)
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 fetched objects
我也直接查看了sqlite数据库,数据都很好:
sqlite data view
在启动后从 sqlite 数据库中读取我的数据时,谁能阐明我的数据发生了什么?
【问题讨论】:
【参考方案1】:让您恼火的nil
属性只是显示在调试器中,因为尚未获取详细信息。如果您遍历您的结果并记录特定属性,例如locationName
,您会看到它就在那里。
【讨论】:
当您说日志特定属性时,这与我在上面所做的 NSLog 有何不同? 那是因为Core Data总是在后台优化。它将获取绝对最小值并仅在必要时填写空白。这称为Faulting。以上是关于Core Data fetchedObjects data = nil 除了最后一个条目的主要内容,如果未能解决你的问题,请参考以下文章
NSFetchedResultsController fetchedObjects 的深度
NSFetchedResultsController:在调用 -performFetch 之前,我是不是应该始终检查 fetchedObjects==nil?
RestKit 和 fetchedResultsController performFetch 成功但 fetchedObjects 为空
fetchedResultsController.fetchedObjects 在 iOS 10 beta 1 和 Swift 2.3 上崩溃