核心数据关系节约

时间:2012-03-27 17:24:55

标签: iphone objective-c core-data

我在CoreData中设置的关系遇到了麻烦。它的一对多,一张桌子可以有很多人,但只有一个人可以坐在一张桌子上。

我的应用基于Apples CoreDataBooks示例here

但这并不能处理关系。您在示例项目中看到了'EditingViewController.m',我也有这个,用户编辑的地方并保存对CoreData对象的选定属性的更改。

所以让我们说他们去选择编辑我个人实体的name属性。他们得到一个文本字段,输入一个名称,然后点击保存按钮,完成。

现在我的person实体与我的表实体有关系,但我无法正确保存它,而且我可能还不完全理解它是如何工作的。所以让我们说他们选择编辑那个人的表,他们得到一个UIPickerView嚎叫表的列表,很好,我已经到目前为止,我已经使用获取请求来获取表对象并列出它们。

通常设置标准属性,我的代码中会调用这样的行:

[editedObject setValue:textField.text forKey:editedFieldKey];

然而,这次我正在使用一段关系,所以这不起作用,对吗?

所以现在我的关系已经设定好了,我试试这个而不是上面的那个:

[tableObject addGuestObject:(Person *)editedObject];

因此,从我填充我的选择器视图的获取请求中,我计算出所选的表并获取该对象tableObject。然后,正如CoreDataBooks示例已经为我做的那样,editedObject已经传递给了这个视图,并且是我们正在编辑的人。

所以这就是我喜欢误解它的地方。当然,与最后一行代码一样,我们只需获取现有的表对象(已选中),然后将现有的guest对象添加到其中?

但是这给了我这个错误并且崩溃了:

'NSObjectInaccessibleException', reason: 'CoreData could not fulfill a fault for '0x145640 <x-coredata://2FAD62C1-382A-4398-A4CA-02B4B41DC9A5/Table/p2>''

不完全确定如何解决此问题。

1 个答案:

答案 0 :(得分:0)

通常,'无法实现错误'意味着对象已从持久存储中删除,但您仍然具有对该对象的引用。这可能由于多种原因而发生(持久存储已更改,对象被另一个线程删除,对象由另一个具有级联关系的对象拥有,已被删除)。认为我们需要更多关于它的关系的信息。