MagicalRecord 不保存数据
Posted
技术标签:
【中文标题】MagicalRecord 不保存数据【英文标题】:MagicalRecord does not save data 【发布时间】:2013-11-26 12:32:35 【问题描述】:我正在尝试一些非常基本的 MagicalRecord 实现来掌握它并遇到以下问题。
当我保存一个条目然后获取该类型的条目时,它会找到我刚刚保存的条目。但是,当我保存条目,关闭应用程序,重新启动它,然后获取时,它出现空。
保存代码:
- (void)createTestTask
NSManagedObjectContext *localContext = [NSManagedObjectContext contextForCurrentThread];
Task *task = [Task createInContext:localContext];
task.tName = @"First Task";
task.tDescription = @"First Task created with MagicalRecord. Huzzah!";
NSError *error;
[localContext save:&error];
if (error != Nil)
NSLog(@"%@", error.description);
获取代码:(如果实际保存了任何内容,我只想知道这里)
- (void) fetchTasks
NSArray *tasks = [Task findAll];
NSLog(@"Found %d tasks", [tasks count]);
我确定我在这里遗漏了一些东西,但我似乎在 *** 或我查看的教程中找不到任何东西。
欢迎任何帮助。
【问题讨论】:
【参考方案1】:我必须问一个明显的“是否已插入”问题:您是否使用 +[MagicalRecord setupCoreDataStack]
方法之一初始化了核心数据堆栈?
您的堆栈是否正确初始化?也就是说,您的商店和型号是否兼容?如果它们不是,MagicalRecord(更恰当地说,Core Data)将设置整个堆栈而没有持久存储。这很烦人,因为看起来一切都很好,直到它无法保存到商店……因为没有商店。 MagicalRecord 有一个+[MagicalRecord currentStack]
方法,可用于检查堆栈的当前状态。设置堆栈后在调试器中尝试。
假设你这样做了,另一件要检查的是错误日志。如果你使用
[localContext MR_saveToPersistentStoreAndWait];
应将任何错误记录到控制台。通常,当您在应用程序的后续运行中看不到数据时,这是因为您认为调用 save 时没有保存数据。反过来,保存不会发生,因为您的数据没有正确验证。一个常见的例子是,如果你有一个必需的属性,并且在你调用 save 时它仍然是 nil。 “正常”核心数据根本不会记录这些问题,因此您可能认为它有效,但实际上保存操作失败了。另一方面,MagicalRecord 会捕获所有这些错误并将它们记录到控制台,至少可以告诉您数据发生了什么。
【讨论】:
saveToPersistentStoreAndWait 成功了。 currentStack 表明它至少可以正常工作。不知道为什么保存没有正确执行,但 saveToPersistentStoreAndWait 做到了。有什么想法吗?【参考方案2】:当我开始使用魔法记录时,我也遇到了这个问题,问题是您用来保存数据的上下文。这是我的代码,可能会对您有所帮助
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext)
NSArray *userInfoArray = [UserBasicInfo findByAttribute:@"userId" withValue:[NSNumber numberWithInt:loggedInUserId] inContext:localContext];
UserBasicInfo* userInfo;
if ([userInfoArray count])
userInfo = [userInfoArray objectAtIndex:0];
else
userInfo = [UserBasicInfo createInContext:localContext];
userInfo.activeUser = [NSNumber numberWithBool:YES];
userInfo.firstName = self.graphUser[@"first_name"];
userInfo.lastName = self.graphUser[@"last_name"];
userInfo.userId = @([jsonObject[@"UserId"] intValue]);
userInfo.networkUserId = @([jsonObject[@"NetworkUserId"] longLongValue]);
userInfo.userPoint = @([jsonObject[@"PointsEarned"] floatValue]);
userInfo.imageUrl = jsonObject[@"Picturelist"][0][@"PictureUrL"];
userInfo.imageUrlArray = [NSKeyedArchiver archivedDataWithRootObject:jsonObject[@"Picturelist"]];
completion:^(BOOL success, NSError *error)
];
【讨论】:
【参考方案3】:完成后使用它
[[NSManagedObjectContext MR_defaultContext]saveToPersistentStoreAndWait];
【讨论】:
这个问题已经回答了......你提到的是原始答案的一部分......以上是关于MagicalRecord 不保存数据的主要内容,如果未能解决你的问题,请参考以下文章