1
votes

Can anyone help me with my the code below. It looks right to me, but the last statement causes an exception. All I'm trying to do is create an NSPredicate to use with an NSFetchRequest.
The "Array" variable below has these four objects according to the debugger:

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]]; 
...
}

Debugger output:

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

1 Answers

2
votes

Your predicate format string has a &@ token for an NSNumber. Change it to %@.