我正在尝试获取核心数据库的记录,但它给出了以下错误。
错误 - [__ NSDictionaryM intValue]:无法识别的选择器发送到实例0x13f26a60
在线
NSArray *results = [moc executeFetchRequest:request error:&error];
以下是获取请求的完整代码。
NSManagedObjectContext *moc = [delegate managedObjectContext];
NSPredicate *predicate =[NSPredicate predicateWithFormat:@"NOT (serverId IN %@)", a];
[request setEntity:[NSEntityDescription entityForName:@"Categories" inManagedObjectContext:moc]];
[request setPredicate:predicate];
NSError *error = nil;
id results = [moc executeFetchRequest:request error:&error];
NSLog(@"results %@",results);
// error handling code
[request release];
答案 0 :(得分:6)
我假设你的数组a
不包含数字,而是字典,例如:
NSArray *a = @[
@{@"serverId" : @"2", ...},
@{@"serverId" : @"4", ...}
];
因为这会导致您收到的错误消息。
您必须创建一个仅包含“serverId”数字的数组,并在谓词中使用它:
NSArray *serverIds = [a valueForKey:@"serverId"];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"NOT (serverId IN %@)", serverIds];
答案 1 :(得分:0)
我遇到与开发人员相同的问题,但在我的情况下,错误是我使用了错误的转换说明符。我的数组包含NSNumber对象,我使用%ld
作为转换说明符。我确实将转换说明符更改为%@
,正如Martin R建议的那样,它就像一个魅力。
希望这有助于某人。