我在 Mac Os X 10.6 上使用 SQL 存储时遇到了 Core Data 的奇怪问题。我有一个NSManagedObject
子类称为Family
有属性name
和一段关系personList
连接到另一个NSManagedObject
子类称为Person
有属性firstname
和反比关系family
. A Person
只有一个family
, and a family
可以有几个Person
s.
说我有一个Family
object family
指着家庭“Doe”与 2Person
(约翰和简)连接到它,我执行以下请求:
NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:[NSEntityDescription entityForName:@"Person" inManagedObjectContext:managedObjectContext]];
[request setPredicate:[NSPredicate predicateWithFormat:@"family.name=%@",[family name]]];
NSArray *array = [managedObjectContext executeFetchRequest:request error:&error];
我得到一个大小为 2 的数组,其中有 2 个人:Jane 和 John,姓氏 Doe。现在,如果我使用其合成访问器更新该系列,在我的例子中:
[family setName:@"Wheat"]
得到列表后我无法Person
使用相同的获取请求。结果是[array count]
of 0
.
如果我将谓词更改为以下行,它会再次起作用:
[request setPredicate:[NSPredicate predicateWithFormat:@"family=%@",family]];
因此,就好像谓词没有使用家庭属性名称的更新版本,即使我有NSFetchRequest
设置为默认值(所以includesPendingChanges
返回“是”)。这对我来说毫无意义。看来NSFetchRequest
找到family
对象,但看不到它的值family.name
已更新,未保存,并且位于managedObjectContext
在记忆中。当然,如果我保存商店,它就会再次起作用。
任何想法?我已经阅读了 Mac 文档,但不明白为什么会失败。