【问题标题】:Xcode 4 - Adding and associating an object to an entity using relationshipsXcode 4 - 使用关系添加对象并将其关联到实体
【发布时间】:2011-04-20 00:42:49
【问题描述】:

几周以来,我一直在学习如何在 xcode 中使用 Core Data,但一直不知道如何让这些关系发挥作用。

在我的代码中,我有 2 个实体。 “房屋”实体和“城市”实体。一个房子只能属于一个城市,但一个城市可以有很多与之相关的房子。所以我在房子和城市实体之间建立了一对多的关系。

以下代码sn-p在城市视图控制器中,它只是一个表格视图,显示所有可供选择的城市。该列表已预先填充在城市实体中。现在,当我选择一行时,我尝试执行以下代码将房屋与所选城市相关联,但结果始终为 nil。

referringObject 是我正在创建的房屋对象 城市是从房子到城市实体的关系

感谢任何帮助

NSManagedObject *selectedCity =
    [self.fetchedResultsController objectAtIndexPath:indexPath];

[self.referringObject setValue:[selectedCity valueForKey:@"cityname"] 
    forKeyPath:@"cities.cityname"];

【问题讨论】:

    标签: core-data xcode4 core


    【解决方案1】:

    您希望将城市对象与房屋对象相关联。您无需更改其中的 cityname 值。这样,每个城市的表中只有一个条目。所以你要做的是:

     NSManagedObject *selectedCity = [self.fetchedResultsController objectAtIndexPath:indexPath]; 
    [self.referringObject setValue:selectedCity forKeyPath:@"city"];
    

    这将为您建立双方的关系。然后,您可以使用 houseObj.city.cityname 从房屋对象访问城市名称,或者使用 city.houses 获取城市中的房屋列表(假设您命名了关系房屋)。

    【讨论】:

    • 哇,这么简单。非常感谢!!
    • 另外,要使用点符号,您需要设置具有属性的 NSManagedObject 子类来执行此操作。否则你需要通过 -value:forKey: 方法。我已经习惯了自动这样做,以至于我没有想到它不是标准的。我建议让 mogenerator 为你做这件事。
    • 你们为什么要操纵 NSManagedObjects? ORM 框架的整个想法是处理对象?
    • 我创建 NSManagedObject 子类以向其添加 @dynamic 属性的最大原因。 [对象 setSomeProperty:value];对我来说比 [object setValue:value forKey:@"someProperty"];对我来说,由于编译器不会验证您的密钥字符串是否有效,因此不太容易出错。我通常这样做的另一个主要原因是瞬态值。就像您需要存储颜色一样,您必须存储它的存档。所以你有为你打包和解包的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    相关资源
    最近更新 更多