使用来自NSDrray的NSArray的谓词创建NSSet

时间:2013-11-16 03:57:23

标签: ios core-data nsarray nsdictionary nsset

我正在尝试从NSDiction的NSArray创建一个NSSet。但是,每次线程命中我的NSSet代码时,它都会抛出一个BAD ACCESS错误,我的应用程序会崩溃。

NSSet *matchingItems = [insProject.ins filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"dpc == %@", dpc]];

dpc == 2

当我记录insProject.ins时,这就是我得到的。

2013-11-16 16:53:27.148 myAPP[7979:907] Relationship 'ins' on managed object (0x1d570b00) <insProject: 0x1d570b00> (entity: insProject; id: 0x1d575830 <x-coredata://XXXXXXXXXXX/insProject/p2> ; data: <fault>) with objects {(
    <ins: 0x1d59cf60> (entity: ins; id: 0x1d59c040 <x-coredata://XXXXXXXXXXX/ins/p50> ; data: {
    dpc = 11;
}),
    <ins: 0x1d59cbe0> (entity: ins; id: 0x1d59bf80 <x-coredata://28BFA6C4-F20F-445D-AD93-2CA028303C28/ins/p38> ; data: {
    dpc = 4;
}),
    <ins: 0x1d59cc80> (entity: ins; id: 0x1d59bfa0 <x-coredata://28BFA6C4-F20F-445D-AD93-2CA028303C28/ins/p40> ; data: {
    dpc = 7;
}),
    <ins: 0x1d59c900> (entity: ins; id: 0x1d59bf50 <x-coredata://28BFA6C4-F20F-445D-AD93-2CA028303C28/ins/p35> ; data: {
    dpc = 9;

}),
    <ins: 0x1d59cd80> (entity: ins; id: 0x1d59bfd0 <x-coredata://28BFA6C4-F20F-445D-AD93-2CA028303C28/ins/p43> ; data: {
    dpc = 16;
}),
    <ins: 0x1d59cf20> (entity: ins; id: 0x1d59c030 <x-coredata://28BFA6C4-F20F-445D-AD93-2CA028303C28/ins/p49> ; data: {
    dpc = 2;
})
)}

正如您所看到的,数组中有一个项目有dpc == 2但是这个NSSet代码在尝试运行时会发疯。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您的NSPredicate的格式字符串与传递给它的dpc的值之间的类型不匹配:带有%@的格式字符串需要一个对象,所以将原始类型传递给它会触发未定义的行为。

如果dpcint,请将格式字符串更改为@"dpc == %d";它应该解决问题。或者,将dpc设为NSNumber,并保留%@格式:

NSNumber *dpc = @2; // This is the new syntax for [NSNumber numberWithInt:2]