创建了核心数据实体但未保存属性

Posted

技术标签:

【中文标题】创建了核心数据实体但未保存属性【英文标题】:Core Data Entity Created But Attributes Not Saving 【发布时间】:2015-02-20 13:25:02 【问题描述】:

我有一个相对简单的实体。当我创建它,设置它的属性并保存它时,它保存成功。我稍后可以检索它,它不为零,我从 MagicalRecord 收到一条成功的保存消息。

当我检索它并尝试访问任何属性时,尽管该属性为零。实体本身很好,但属性全部为零。我在保存之前检查了它们是否都设置正确。

我以前没有遇到过这个问题。为什么会发生?

注意:这种情况并非每次都会发生。大多数时候我调用该方法来创建和保存这个实体,以后可以毫无问题地检索它。该问题是间歇性的,但可以在每次运行时复制。

代码:

    Entity1 *entity1 = [Entity1 MR_createEntityInContext:localContext];
    [entity1 setUpEntity:myobject];

    EntityChild *entityChild=[EntityChild MR_createEntityInContext:localContext];
    [entityChild setUpEntityChild:entity.child withContext:localContext];
    [entityChild setEntity1:entity1];

    [localContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error) 

    ];

更新:

如果我查看 sqlite 数据库并搜索它实际上根本不存在的实体。所以 MagicalRecord 告诉我它保存了,CoreData 让我检索一个非 nil 对象(尽管具有 nil 属性)但数据库中不存在记录。

【问题讨论】:

请出示您的代码 @iCode 我添加了创建和保存实体的代码。您还需要其他代码吗? 你为什么说它告诉你它保存了......你的完成块是空的......你确定没有错误吗?此外,这还不够代码......细节可能很重要,你没有包括任何一个。 【参考方案1】:

我不了解您的代码标准。因为我是 ios 开发的新手。我使用下面的代码进行检索。

   NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
   NSEntityDescription *entityRef = [NSEntityDescription entityForName:@"Entity1" inManagedObjectContext:appDelegate.managedObjectContext];//localContext
   [fetchRequest setEntity:entityRef];
   NSError *error=nil;
   NSArray *detailsArray = [appDelegate.managedObjectContext executeFetchRequest:fetchRequest error:&error];

   if (error) 
   NSLog(@"Unable to execute fetch request.");
   NSLog(@"%@, %@", error, error.localizedDescription);
  

保存数据

NSManagedObjectContext *context = [appDelegate managedObjectContext];//localContext
NSManagedObject *objectRef = [NSEntityDescription
                                           insertNewObjectForEntityForName:@"Entity1"                                          inManagedObjectContext:context];
 [objectRef setValue:@"IOS" forKey:@"Name"];
 [objectRef setValue:@"positive" forKey:@"Attitude"];
 NSError *error;
                if (![context save:&error]) 
                    NSLog(@"Whoops, couldn't save: %@", [error localizedDescription]);
                

希望对您有所帮助...!

【讨论】:

谢谢。我正在为 CoreData 使用一个名为 MagicalRecord 的库,这就是为什么我的代码看起来有点奇怪的原因。我不认为代码有什么特别的问题,因为它在 99% 的时间里都能正常工作。 @kmcgrady “我不认为代码有什么特别的问题,因为它在 99% 的时间里都能正常工作。” -- 真的吗?【参考方案2】:

好的,我明白了。当我保存时,代码没有问题。这实际上是另一个类中的某些代码从错误的上下文中检索数据的问题。当我更改上下文时,它可以正常工作。

我仍然不确定为什么这种情况只是偶尔发生,而不是每次运行代码时都会发生,但它现在可以工作了。

感谢大家的帮助。

【讨论】:

以上是关于创建了核心数据实体但未保存属性的主要内容,如果未能解决你的问题,请参考以下文章

核心数据不保存一个实体的属性

核心数据保存和加载到多个实体

核心数据迁移删除实体数据

核心数据 - 编辑、递增和保存属性到现有实体

核心数据实体布尔属性未保存在表格单元格删除中

核心数据 - 保存和检索属性 - 示例代码