在Xcode 4中使用核心数据和绑定对密钥路径进行建模
我的模型中有两个对象:Person和Address。此人有一个关键姓名和地址关系,地址有一个关键街道 我已经设计了一个用户界面来显示一个包含一列(Person.name)和两个包含name和street的文本字段的表 我已经创建了一个NSArrayController,其中managedObjectContext集和ObjectController集为Entity和EntityName Person 运行应用程序时,该表将显示所有添加的人员。这两个文本字段通过绑定选项卡连接到Person ArrayController: 具有值的名称字段: 绑定到:个人/控制器密钥:选定/模型密钥路径:名称 有价值的街景: 绑定到:个人/控制器密钥:选定/型号密钥路径:address.street 我能够将某些东西写入名称中,并将其永久存储。我也可以将一些东西输入streetField,但它没有被存储在Xcode 4中使用核心数据和绑定对密钥路径进行建模,xcode,core-data,binding,Xcode,Core Data,Binding,我的模型中有两个对象:Person和Address。此人有一个关键姓名和地址关系,地址有一个关键街道 我已经设计了一个用户界面来显示一个包含一列(Person.name)和两个包含name和street的文本字段的表 我已经创建了一个NSArrayController,其中managedObjectContext集和ObjectController集为Entity和EntityName Person 运行应用程序时,该表将显示所有添加的人员。这两个文本字段通过绑定选项卡连接到Person Arr
有人知道为什么吗???当数组控制器创建person对象时,会发生类似于以下代码的情况:
(假设moc是AppDelegate managedObjectContext,也假设Person是NSManangedObject的子类): 如果记录了
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
没有指向实例化的对象 没有足够的信息来解决这个问题。你描述它的方式应该是有效的。我也这么认为。但是在一个scratch项目中尝试一下,你会发现它不起作用。你能以某种方式将street字段绑定到地址吗?
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"];