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 导致异常的主要内容,如果未能解决你的问题,请参考以下文章