我可以在谓词中使用keyPath吗?

时间:2010-06-17 18:59:14

标签: iphone core-data

出于某种原因,这不起作用(虽然密钥路径确实存在):

实体在员工上设置。

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"department.departmentName == %@", departmentName];
[fetchRequest setPredicate:predicate];

NSError *fetchError = nil;
NSUInteger count = [moc countForFetchRequest:fetchRequest error:&fetchError]; // execution simply stops at this line, with no error or console log

当要求计数时,执行只在上面的最后一行停止。我没有得到控制台日志。我也没有任何异常。执行就停止了。持久存储中还没有对象。也许它崩溃是因为它试图在一个不存在的对象中跟踪一个keypath?这有意义吗?

GDB停止的行是:

0x002a31cb  <+0459>  test   %eax,%eax

在此之前,我在堆栈跟踪中看到了很多NSSQLAdapter ...调用。肯定有问题。

好吧,但是当我将实体设置为关键路径的目的地然后只做

之类的操作时
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"departmentName == %@", departmentName];

然后没有问题,数量只是0。

2 个答案:

答案 0 :(得分:2)

当你在对象图中有一个循环引用时,我已经看到了这种“只是停止”的行为。抓取会陷入循环中。如果是这种情况,编译器通常会警告您,但它不会阻止您运行。

答案 1 :(得分:1)

确保您还设置了获取请求的实体?与setEntity: