Core data Xcode 4-使用关系将对象添加到实体并将其关联

Core data Xcode 4-使用关系将对象添加到实体并将其关联,core-data,xcode4,core,Core Data,Xcode4,Core,几周来,我一直在学习如何在xcode中使用核心数据,但在如何使这些关系发挥作用方面遇到了难题 在我的代码中,我有两个实体。“房屋”实体和“城市”实体。一座房子只能属于一个城市,但一个城市可以有许多与其相关联的房子。所以我在房屋和城市实体之间建立了一对多的关系 以下代码段位于城市视图控制器中,该控制器只是一个表视图,显示了所有可供选择的城市。该列表在城市实体中预先填充。现在,当我选择一行时,我尝试执行以下代码将一所房子与所选城市关联起来,但结果始终为零 referringObject是我正在创建的

几周来,我一直在学习如何在xcode中使用核心数据,但在如何使这些关系发挥作用方面遇到了难题

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

以下代码段位于城市视图控制器中,该控制器只是一个表视图,显示了所有可供选择的城市。该列表在城市实体中预先填充。现在,当我选择一行时,我尝试执行以下代码将一所房子与所选城市关联起来,但结果始终为零

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

谢谢你的帮助

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

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

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

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

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

哇,太简单了。谢谢!!另外,要使用点表示法,需要使用属性设置NSManagedObject子类。否则,您需要遍历-value:forKey:methods。我已经习惯了自动这么做,所以我不认为这是不标准的。我建议让mogenerator帮你做。你们为什么要操纵NSManagedObject?ORM框架的全部思想是处理对象?我创建NSManagedObject子类的最大原因是向其中添加@dynamic属性。[对象集合集合属性:值];对我来说比[object setValue:value forKey:@“someProperty”]干净得多;对我来说,它不太容易出错,因为编译器不会验证您的密钥字符串是否有效。我通常这样做的另一个主要原因是瞬态值。比如,如果你需要存储一种颜色,你必须存储它的存档。所以你有一些方法可以帮你打包和解包。