Ios NSPredicate以NSN为单位编号

Ios NSPredicate以NSN为单位编号,ios,objective-c,nspredicate,nsnumber,Ios,Objective C,Nspredicate,Nsnumber,我已设置了一个NSPredicate,以检查对象类别id是否在一组数字中中 守则: ///This is working NSArray *arr2 = [[NSArray alloc]initWithObjects:@[@3,@2,@3],nil]; [NSPredicate predicateWithFormat:@"category_id IN %@", arr2] //This is not working NSArray *arr = [[NSArray alloc]init

我已设置了一个NSPredicate,以检查对象
类别id
是否在一组数字中

守则:

 ///This is working

NSArray *arr2 = [[NSArray alloc]initWithObjects:@[@3,@2,@3],nil];

[NSPredicate predicateWithFormat:@"category_id IN %@", arr2]

//This is not working

NSArray *arr = [[NSArray alloc]initWithArray:category_array]; //Array with NSNumbers

[NSPredicate predicateWithFormat:@"category_id IN %@", arr]
这工作正常,但在我将
类别\u数组
更改为包含NSNumber后,谓词停止工作。如何将NSPredicate用于NSNumber

更新: 阵列:

类别的实体


你犯了一个很小但很明显的错误。您正在将数组
@[@1、@2、@4]
添加为数组
类别数组中的对象

尝试:

或者干脆

NSArray *category_array = @[@1,@2,@4];

你犯了一个小错误

试试这个代码

NSArray *category_array = @[@1,@2,@4];

新的类别数组是什么样子的?它也是NSNumber(代码的第一行),我更新了答案在调试器中的外观?什么是
类别id
?它是某个物体的属性吗?是的。我更新了答案为什么要用刚创建的数组上的对象创建数组
@[]
[[NSArray alloc]initWithArray:][/code>完全相同,因此您正在创建一个数组,并使用它创建一个包含其内容的数组。为什么?对不起,那是打字错误。用那种方法很好。问题是,当我使用
[array addObject:num]
@BlackM添加NSNumber时,您的
类别id
是字符串而不是数字。这可能是个问题。是的,我知道为了简单起见,我只是把它添加为字符串。不管怎样,这是第一种方法。我将尝试更改它,并让您知道,请将该工作代码也添加到问题中。第一块代码根本没有任何意义。他为什么要从数组中分配数组?创建了
@[]
快捷方式来替换整个alloc init内容。这只会产生不必要的开销。我的阵列是使用NSNumber动态构建的,所以我不能这样做
NSArray *category_array = @[@1,@2,@4];