【问题标题】:MagicalRecord does not save dataMagicalRecord 不保存数据
【发布时间】: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]);
}

我确定我在这里遗漏了一些东西,但我似乎在 stackoverflow 或我查看的教程中找不到任何东西。

欢迎任何帮助。

【问题讨论】:

    标签: ios magicalrecord


    【解决方案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];
      

      【讨论】:

      • 这个问题已经回答了......你提到的是原始答案的一部分......
      猜你喜欢
      • 2017-05-20
      • 2017-08-16
      • 2017-12-02
      • 1970-01-01
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多