我正在尝试使用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]);
}
我确信我在这里遗漏了一些东西,但在stackoverflow或我看过的教程中似乎找不到任何东西。
欢迎任何帮助。
答案 0 :(得分:8)
我必须问明显的“它是否插入”问题:您是否使用+[MagicalRecord setupCoreDataStack]
方法之一初始化了核心数据堆栈?
你的堆栈是否正确初始化?也就是说,您的商店和型号是否兼容?如果不是,MagicalRecord(更合适的是,Core Data)将在没有持久存储的情况下设置整个堆栈。这很烦人,因为看起来一切都很好,直到它无法保存到商店...因为没有商店。 MagicalRecord有一个+[MagicalRecord currentStack]
方法,您可以使用它来检查堆栈的当前状态。在设置堆栈后,在调试器中尝试使用它。
假设你这样做了,另一件要检查的是错误日志。如果你使用
[localContext MR_saveToPersistentStoreAndWait];
应将任何错误记录到控制台。通常,当您在应用程序的后续运行中看不到数据时,这是因为当您认为自己调用了save时数据未保存。反过来,保存不会发生,因为您的数据未正确验证。一个常见的例子是,如果你有一个必需的属性,并且在你调用save时它仍然是零。 “正常”核心数据根本不记录这些问题,因此您可能认为它有效,实际上,当保存操作失败时。另一方面,MagicalRecord将捕获所有这些错误并将其记录到控制台,至少告诉您数据发生了什么。
答案 1 :(得分:3)
当我开始使用魔法记录时,我也遇到了这个问题,问题是你用来保存数据的上下文。这是我的代码可能会帮助你
[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) {
}];
答案 2 :(得分:0)
完成后使用此
[[NSManagedObjectContext MR_defaultContext]saveToPersistentStoreAndWait];