【问题标题】:iPhone - core data NSSet relationshipiPhone - 核心数据 NSSet 关系
【发布时间】:2011-01-18 22:19:57
【问题描述】:

我有两个实体 Books 和 Bundles。一本书可以不属于任何人,属于一个或多个捆绑包。所以我在这些实体之间有一个双向的多对多关系。

我即将在 Book 部分设置此关系的值。

如果属性是常规属性,我会简单地做类似的事情

aBook.title = @"this is my title"; 

如果我想为一本书设置标题。但由于这是一个双向的多对多关系,核心数据说它是一个 NSSet 属性。

我的问题是:如何设置和读取该属性的值?

我一开始以为它是一个普通的 NSSet。所以,看完产品我就简单做了

NSSet *aSet = Book.fromBundle;

但令我沮丧的是,aSet 包含零个对象

所以我以为我设置错了。 我之前设置的做

Book.fromBundle = [NSSet setWithObject:aBundle];

(是的,所有更改都保存到数据库中)

我错过了什么吗?谢谢

【问题讨论】:

    标签: iphone core-data


    【解决方案1】:

    这是一个正常的集合,但核心数据建议不要直接分配一个新集合(出于这个原因)。如果您使用的是自定义类,标准实现将包括addFromBundleObject:removeFromBundleObject: 方法供您使用。如果您不使用自定义类,或者选择不实现这些方法,则可以使用mutableSetValueForKey: 方法获取可以修改的集合。

    NSMutableSet *mutableSet = [book mutableSetValueForKey:@"fromBundle"];
    [mutableSet addObject:aBundle];
    

    【讨论】:

    • 谢谢。该应用程序不再崩溃,但是在多次使用此命令将不同的捆绑包添加到一本书后,该书只存储了最后一个。我已经在外部应用程序中检查了数据库,因为我还没有弄清楚如何在请求上创建谓词以检查捆绑对象是否在 fromBundle 上。在太多的关系中,我会使用 [NSPredicate predicateWithFormat:@"(fromBundle ==%@)", aBundle],但我不知道如何在 NSSet 上执行此操作...如果您也可以提供帮助,我很感激(如果不是要求太多的话)...:D
    • 一对多关系与多对多关系基本相同。两者都表示为 NSSet。唯一的区别是如何设置反向关系。您应该能够为一对多关系做同样的事情。
    猜你喜欢
    • 2016-11-29
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多