我有一个相对简单的实体。当我创建它,设置其属性并保存它时,它会成功保存。我可以稍后检索它并且它不是零,我从MagicalRecord获得成功的保存消息。
当我检索它并尝试访问任何属性,尽管属性为nil。实体本身很好,但属性都是零。在保存之前,我已经检查过它们都已正确设置。
我以前没有遇到过这个问题。为什么会发生?
注意:每次都不会发生这种情况。大多数情况下,我调用该方法来创建和保存此实体,以后可以检索它而不会出现任何问题。问题是间歇性的,但可以在每次运行时复制。
代码:
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属性),但数据库中没有记录。
答案 0 :(得分:1)
我不明白你的代码标准。因为我是IOS Development的新手。我使用下面的代码进行检索。
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]);
}
希望它可以帮助你......!
答案 1 :(得分:0)
好的,我深究了这一点。当我执行保存时,代码不是问题。这实际上是另一个类中的一些代码从一个错误的上下文中检索数据的问题。当我改变上下文时,它正常工作。
我仍然不确定为什么这只会偶尔发生,而不是每次代码都运行但它现在正在运行。
感谢大家的帮助。