我对Core Data很新,而且我遇到了一个我不明白的问题。我不知道出了什么问题。
我正在保存到我的持久存储中,使用以下代码从JSON文件中读取实体“权重”的7个对象:
for (NSDictionary *values in aWeightValues)
{
weightValues = [NSEntityDescription insertNewObjectForEntityForName:@"Weight"
inManagedObjectContext:moc];
[weightValues setValue:[typeWeight objectForKey:@"unit"] forKey:@"unit"];
[weightValues setValue:[values objectForKey:@"timestamp"] forKey:@"date"];
[weightValues setValue:[values objectForKey:@"value"] forKey:@"amount"];
if (![moc save:&error])
{
NSLog(@"Problem saving: %@", [error localizedDescription]);
}
}
for循环产生7个循环,这意味着它被正确保存(谈论对象的数量)。
但是,当我尝试以这种方式从持久存储中检索数据时:
-(NSMutableArray *) extractWeightEntities
{
AppDelegate *appDelegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];
NSError *error;
NSManagedObjectContext *moc = [appDelegate managedObjectContext];
NSEntityDescription *entityWeight = [NSEntityDescription entityForName:@"Weight" inManagedObjectContext:moc];
NSFetchRequest *request = [[[NSFetchRequest alloc]init]autorelease];
[request setEntity:entityWeight];
entityWeight = nil;
fetchResult = [[moc executeFetchRequest:request error:&error]mutableCopy];
return (fetchResult);
}
并尝试显示检索到的每个对象的一个属性,我在TableView中获得了1044行!什么时候我应该只有7岁。
我做错了什么?我在保存或正在检索时出现问题吗?
我希望你能帮忙解决这个问题。非常感谢提前!!
答案 0 :(得分:1)
您不需要在循环的每次迭代中调用save,这是非常低效的。之后保存。
在你的循环上加一个断点,并确保它只会超过它7次。
数据是否在不断累积?你每次都在删除应用程序吗?如果继续运行代码 - 它将继续向数据存储区添加对象,除非在插入数据存储区之前检查它们是否存在于数据存储区中。