Core Data 只保存最后一项
Posted
技术标签:
【中文标题】Core Data 只保存最后一项【英文标题】:Core Data is saving only the last item 【发布时间】:2013-07-26 14:49:22 【问题描述】:我还是 Core Data 的新手。
我试图在一个数组上循环三遍,在每个循环中,我都保存了索引号。
但是在获取结果时它只显示最后一个索引号。它覆盖了之前插入的所有内容。
我的代码写在 AppDelegate 中。
这是我的代码:
NSManagedObjectContext *context = [self managedObjectContext];
NSManagedObject *tagsDB = [NSEntityDescription insertNewObjectForEntityForName:@"Tags" inManagedObjectContext:context];
for (int i = 0 ; i < 3 ; i++)
[tagsDB setValue:i forKey:@"ID"];
[self saveContext];
...
- (void)saveContext
NSError *error = nil;
NSManagedObjectContext *managedObjectContext = self.managedObjectContext;
if (managedObjectContext != nil)
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error])
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
【问题讨论】:
当我在每次迭代中重新声明 NSManagedObject 时,所有数据都会被保存,但我总是会得到一行额外的空值 【参考方案1】:您必须为每个值创建实体。
NSManagedObjectContext *context = [self managedObjectContext];
for (int i = 0 ; i < 3 ; i++)
NSManagedObject *tagsDB = [NSEntityDescription insertNewObjectForEntityForName:@"Tags" inManagedObjectContext:context];
[tagsDB setValue:i forKey:@"ID"];
[self saveContext];
【讨论】:
当我在每次迭代中重新声明 NSManagedObject 时,所有数据都会被保存,但我总是会得到一行额外的空值 对数据库执行查询时会出现额外的行? 所以多出一行是正常的吗?我可以摆脱它吗? 当您在数据库上执行请求时会出现额外的行,它们被称为故障,以避免它使用 [YOURFETCHREQUEST setReturnsObjectsAsFaults:NO]; 感谢汤姆的回复。这是我获取的代码。它仍然返回一个空行。 NSManagedObjectContext *managedObjectContext = [self managedObjectContext]; NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Tags"]; [fetchRequest setReturnsObjectsAsFaults:NO]; ....【参考方案2】:在您的 for 循环中 - 重复的代码只会更改新插入项的值。你需要在 for 循环中做的是insertNewObjectForEntityForName
,它将为每次迭代插入一个新的、单独的实体。
【讨论】:
以上是关于Core Data 只保存最后一项的主要内容,如果未能解决你的问题,请参考以下文章