MagicalRecord不保存数据

时间:2013-11-26 12:32:36

标签: ios magicalrecord

我正在尝试使用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或我看过的教程中似乎找不到任何东西。

欢迎任何帮助。

3 个答案:

答案 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];