【问题标题】:How to update NSManagedObjects in Core Data database in code?如何在代码中更新 Core Data 数据库中的 NSManagedObjects?
【发布时间】:2014-05-27 10:02:07
【问题描述】:

我知道当你完成一个实体的属性重置后,系统会自动进行更新工作。但是,我发现有时它不会及时更新。在我的相册应用中,当我
完成相册名称重置,然后进入该相册,该相册的照片如预期显示。但是,当我点击一张照片(它也是数据库中的 NSManagedObject,具有称为相册的关系)进入另一个 ViewController 来显示这张照片时,应用程序崩溃了。但是如果我在更改专辑名称后退出应用程序(更新代码正常工作),然后再次进入应用程序,一切正常,不会发生崩溃。所以我认为崩溃的原因是系统未能及时更新照片和相册的关系(更确切地说,连接到特定照片的相册名称没有及时更新)。 所以我想知道是否有一些手动更新数据库的方法? 这是我的更新代码:

 + (void)changeAlbumNameWithName: (NSString *)newName withOldName: (NSString *)oldAlbumName inManagedObjectContext: (NSManagedObjectContext *)context
    {
        Album *album;
        NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Album"];
        request.sortDescriptors = nil;
        request.predicate = [NSPredicate predicateWithFormat:@"name = %@", oldAlbumName];

        NSError *error;
        NSArray *matches = [context executeFetchRequest:request error:&error];

        if ([matches count] == 1) {
            album = matches[0];
            album.name = newName;
        }

    }

提前致谢!

【问题讨论】:

  • 我以前看过,和我的问题不一样。在我的测试中,我发现在重置一个实体的属性后,该实体被及时更新了,但是与被更新实体有关系的那些实体并没有及时更新。

标签: ios objective-c core-data ios7 nsmanagedobject


【解决方案1】:

您需要在NSManagedObjectContext 上调用save: 方法来提交您所做的更改。

【讨论】:

  • 对不起。在“album.name = newName”之后,我添加代码“BOOL didSave = [context save:&error]; if (didSave) { NSLog(@"did save"); }”NSLog 显示保存为 YES。但它仍然无法更新。 &error 有什么问题吗?
【解决方案2】:

我找到了解决这个问题的方法。 更新专辑名称后,我调用 UIManagedDocument 的一种方法“saveToURL:forSaveOperation:completionHandler:”。使用这种方法,Core Data 数据库可以正确更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-20
    • 2013-10-22
    • 1970-01-01
    • 2023-01-13
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多