Xcode 4中具有核心数据和绑定的模型关键路径

时间:2012-08-14 09:02:08

标签: xcode core-data binding

我的模型中有两个对象:Person和Address。人有一个关键的名字,与地址和地址的关系有一条关键的街道。

我设计了用户界面来显示一个包含一列(Person.name)的表和两个包含name和street的文本字段。

我创建了一个带有managedObjectContext集的NSArrayController,并将ObjectController设置为Entity和EntityName Person。

运行应用程序表格显示所有添加的人员。这两个文本字段通过Bindings选项卡连接到Person-ArrayController:

带有值的nameField: 绑定到:人员/控制器密钥:已选择/模型密钥路径:名称

streetField值: 绑定到:人员/控制器密钥:已选择/模型密钥路径:address.street

我能够将某些东西写入名称并持久存储。我也可以在streetField中输入内容,但不会存储。

有谁知道为什么?

1 个答案:

答案 0 :(得分:1)

当数组控制器创建person对象时,会出现类似于以下代码的内容:
(假设moc是AppDelegate managedObjectContext,也假设Person是NSManangedObject的子类):

Person *personObj = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:moc]; 
personObj.name = @"something"; //some dummy values
[personObj.address setValue:@"dummy address" forKey:@"street"];

如果记录personObj.address,将在控制台上打印nil。 这是因为personObj.address是一个Address对象,到目前为止尚未实例化。因此personObj.address.street将为NULL。 这也是你的情况。

如果您将上述代码更改为以下代码,它将正常工作。

Person *personObj = [NSEntityDescription insertNewObjectForEntityForName:@"Person" inManagedObjectContext:moc];

//create an Address object and assign it to personObj.address (setting the relationship)
personObj.address= [NSEntityDescription insertNewObjectForEntityForName:@"Address" inManagedObjectContext:moc]; 
personObj.name = @"something"; //some dummy values
[personObj.address setValue:@"dummy address" forKey:@"street"]; 

并且无法使用绑定完成此操作。

简而言之,绑定到streetField的{​​{1}}没有获得任何值,因为address.street未指向实例化对象。