0

我的模型中有两个对象:Person 和 Address。Person 有一个关键名称,并且与 Address 和 Address 有一个关键街道的关系。

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

我创建了一个 NSArrayController,其中 managedObjectContext 集和 ObjectController 设置为 Entity 和 EntityName Person。

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

具有值的名称字段:绑定到:人员/控制器键:选定/模型键路径:名称

具有值的 streetField:绑定到:Person / Controller Key:selected / Model Key Path:address.street

我可以在名称中写入一些东西,并且它会被持久存储。我也可以在 streetField 中输入一些东西,但它没有被存储。

有谁知道为什么??

4

1 回答 1

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绑定到address.street不会获得任何值。address

于 2012-08-15T13:28:58.933 回答