【问题标题】:NSManagedObject won't be updated after saving with Magical Record使用 Magical Record 保存后 NSManagedObject 不会更新
【发布时间】:2014-07-15 10:23:13
【问题描述】:

我有一个带有一些属性的NSManagedObject(文件),我编写了一些代码,根据NSManagedObject 中的信息下载带有AFNetworking 的文件 - 下载工作正常! 现在我想更改completion block 中的一些元数据,并使用Magical Record 将更改保存到CoreData。这基本上可以工作,除了我必须重新启动应用程序才能获得 NSManagedObject 的新值 - 这就是问题所在。在一个生命周期中,我无法获得更新的NSManagedObject。我什至尝试重新获取对象...

我不明白,为什么我必须重新启动 App 才能获取更新的信息?有context 问题吗?没看到。

我从defaultContext 获取文件对象:

NSManagedObjectContext *managedObjectContext = [NSManagedObjectContext MR_defaultContext];
NSFetchRequest *fetch = [[NSFetchRequest alloc] init];
[fetch setEntity:[NSEntityDescription entityForName:@"File" inManagedObjectContext:managedObjectContext]];

这是我的下载方法:

- (void)downloadFile:(File*)fileObject {

...

    completionBlock:^(AFHTTPRequestOperation *operation, id responseObject) {
        [MagicalRecord saveWithBlockAndWait:^(NSManagedObjectContext *localContext) {
            File *localFile = [fileObject MR_inContext:localContext];
            localFile.downloadStatus_ = [NSNumber numberWithInt:DownloadStatusCompleted];
         }];

        NSLog(@"State: %@"fileObject.downloadStatus_);

    }

}

更新: 我改变了线路并且它起作用了。我很困惑。我猜想,localContext 实际上应该是当前上下文。哪个应该是对象的那个。

File *localFile = [fileObject MR_inContext:localContext];

File *localFile = [fileObject MR_inContext:[NSManagedObjectContext MR_defaultContext]];

【问题讨论】:

  • 你什么时候运行你的提取?如果您正在阻塞和等待,为什么要使用本地上下文?您是否考虑过使用获取的结果控制器?
  • 在下载文件之前进行提取。据我了解,先生应该使用 localContext。
  • 你说I even tried to refetch the object... - 你在哪里试过?
  • 在NSLog语句之后(那个时候应该更新属性。
  • 您应该验证 MR_inContext: 在该上下文中返回一个实例(因为它可能会失败并返回 nil)。

标签: ios objective-c block nsmanagedobject magicalrecord


【解决方案1】:

我弄清楚发生了什么并想发布答案。

原来NSManagedObject *fileObject 的一个属性在调用completionBlock 之前被更改了,但没有保存它! StoreCoordinator 尝试合并并保存更改的属性(在 completionBlock 中) - 但此操作失败,因为上下文中的原始对象已更改...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-22
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多