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 只保存最后一项的主要内容,如果未能解决你的问题,请参考以下文章

iOS Core Data - 如何避免同时保存多个上下文时崩溃?

在 Core Data (IOS) 中保存数据时出错

在 Core Data 中只保存部分对象

MagicalRecord 导入仅保存最后一项

RestKit 仅保存响应数组中的最后一项

spring-data-jpa循环保存数据,为啥只保存了最后一条数据