【发布时间】: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] 相同 - 无)。
我也直接查看了sqlite数据库,数据都很好:
在启动后从 sqlite 数据库中读取我的数据时,谁能阐明我的数据发生了什么?
【问题讨论】:
标签: ios objective-c sqlite core-data