NSPredicate predicateWithFormat 导致异常

Posted

技术标签:

【中文标题】NSPredicate predicateWithFormat 导致异常【英文标题】:NSPredicate predicateWithFormat causes exception 【发布时间】:2012-02-16 08:14:36 【问题描述】:

谁能帮我写下下面的代码。它看起来对我来说是正确的,但最后一条语句会导致异常。我要做的就是创建一个 NSPredicate 与 NSFetchRequest 一起使用。 根据调试器,下面的“Array”变量有这四个对象:

Array   =   (__NSArrayI *)  0x6b930e0   4 objects
0   =   (__NSCFConstantString *)    0x4067c String1
1   =   (__NSCFConstantString *)    0x408ac String2
2   =   (__NSCFConstantString *)    0x408bc String3
3   =   (__NSCFConstantString *)    0x408cc String4


// Defines from header file  
#define ATT_NODE_LEVEL      @"nodeLevel"
#define NODE_LVL2           4

-(BOOL)initLVL2  
    NSString *cond = [[NSString alloc] initWithFormat:@"parent.fullName"];

    /*   CAUSES AN EXCEPTION    */  
    NSPredicate *pred = [NSPredicate predicateWithFormat:@"(%K == &@) && (%K == %@)", ATT_NODE_LEVEL, [NSNumber numberWithInt:NODE_LVL2], cond, [Array objectAtIndex:0]]; 
...

调试器输出:

objc[6076]: EXCEPTIONS: throwing 0x6e3ddf0 (object 0x6e3fb30, a NSException)
objc[6076]: EXCEPTIONS: searching through frame [ip=0xee0dc0 sp=0xbfffcfc0] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: unwinding through frame [ip=0xee0dc0 sp=0xbfffcfc0] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: handling exception 0x6e3ddd0 at 0xee0dc9
objc[6076]: EXCEPTIONS: rethrowing current exception
objc[6076]: EXCEPTIONS: searching through frame [ip=0xee0ddf sp=0xbfffcfc0] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: searching through frame [ip=0xee0bde sp=0xbfffd000] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: unwinding through frame [ip=0xee0ddf sp=0xbfffcfc0] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: finishing handler
objc[6076]: EXCEPTIONS: unwinding through frame [ip=0xee0df3 sp=0xbfffcfc0] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: unwinding through frame [ip=0xee0bde sp=0xbfffd000] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: handling exception 0x6e3ddd0 at 0xee0c29
objc[6076]: EXCEPTIONS: rethrowing current exception
objc[6076]: EXCEPTIONS: searching through frame [ip=0xee0c16 sp=0xbfffd000] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: searching through frame [ip=0x1496db3 sp=0xbfffea00] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: unwinding through frame [ip=0xee0c16 sp=0xbfffd000] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: finishing handler
objc[6076]: EXCEPTIONS: unwinding through frame [ip=0xee0c40 sp=0xbfffd000] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: unwinding through frame [ip=0x1496db3 sp=0xbfffea00] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: handling exception 0x6e3ddd0 at 0x1496e46
objc[6076]: EXCEPTIONS: rethrowing current exception
objc[6076]: EXCEPTIONS: searching through frame [ip=0x1496e0f sp=0xbfffea00] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: unwinding through frame [ip=0x1496e0f sp=0xbfffea00] for exception 0x6e3ddd0
objc[6076]: EXCEPTIONS: finishing handler
objc[6076]: EXCEPTIONS: unwinding through frame [ip=0x1496e38 sp=0xbfffea00] for exception 0x6e3ddd0

【问题讨论】:

【参考方案1】:

您的谓词格式字符串有一个 NSNumber 的 &@ 标记。将其更改为 %@。

【讨论】:

那个'&'是我的问题。非常感谢你

以上是关于NSPredicate predicateWithFormat 导致异常的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate

NSPredicate 谓词

子查询中的 NSPredicate

NSPredicate 问题

NSPredicate 字符串

NSPredicate == 查询