【发布时间】:2011-08-19 22:51:25
【问题描述】:
我在使用 SQL 存储的 MacOsX 10.6 上遇到了一个奇怪的 CoreData 问题。我有一个名为 Family 的 NSManagedObject 子类,其属性为 name,关系 personList 连接到另一个名为 NSManagedObject 的子类 Person,属性为 firstname 和反向关系 family。一个Person 只能有一个family,而一个family 可以有多个Persons。
假设我有一个 Family 对象 family 指向家庭“Doe”,并有 2 个 Person(John 和 Jane)连接到它,我执行以下请求:
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] 的0。
如果我将谓词更改为以下行,它会再次起作用:
[request setPredicate:[NSPredicate predicateWithFormat:@"family=%@",family]];
所以就好像谓词没有使用族属性名称的更新版本,即使我将NSFetchRequest 设置为默认值(所以includesPendingChanges 返回YES)。这对我来说毫无意义。似乎NSFetchRequest 找到了family 对象,但看不到它的值family.name 已更新,未保存,并且在内存中的managedObjectContext 中。当然,如果我保存了商店,它就会再次运行。
有什么想法吗?我浏览了 Mac 文档,不明白为什么会失败。
【问题讨论】:
标签: sql macos cocoa core-data nsfetchrequest