核心数据不更新逆关系

hpi*_*que 0 macos core-data ios

我的两个实体是 Book 和 Category。一本书可以有很多分类,一个分类可以有很多书。这些关系在数据模型中被标记为彼此的倒数。

当我更新一本书的类别时,我希望相应类别的书籍会自动更新。换句话说:

Book *book = [Book insertNewObjectIntoContext:context];
Category *category = [Category insertNewObjectIntoContext:context];
[book addCategories:[NSSet setWithObject:category]];
BOOL result = [category.books containsObject:book]; // Should be YES
Run Code Online (Sandbox Code Playgroud)

然而,我进入NO了我的应用程序。books返回一个空集。

我三重检查这些关系是否被标记为反向。这里还有什么可以玩的?或者有什么我想念的吗?

如果我手动设置逆关系会伤害吗?如果我做所有事情就像一个魅力。

Mar*_*rra 5

反向关系直到运行循环结束才会更新。在这样之后立即调用它不会给它时间更新。

如果您要执行以下操作:

dispatch_async(dispatch_get_main_queue(), ^{
    BOOL result = [category.books contains:book];
    NSLog(@"Result: %@", result ? @"YES" : @"NO");
});
Run Code Online (Sandbox Code Playgroud)

你会看到你的预期结果。

更新

手动设置反向并没有什么坏处。当一切正常工作时,它会导致周期的浪费,因为 Core Data 必须仔细检查关系,这样你就会看到性能下降。