Objective c 使用NSPredicate筛选NSNumber的NSArray和NSArray的对象NSArray

Objective c 使用NSPredicate筛选NSNumber的NSArray和NSArray的对象NSArray,objective-c,nsarray,nspredicate,Objective C,Nsarray,Nspredicate,我正在尝试对该对象的数组进行文件归档: MyObject.h @interface MyObject : NSObject @property (assign) int id_object; @property (nonatomic, strong) NSString *name; @end 例如,在我的第一个数组中,我有一些MyObject: MyObject *ob1 = [[MyObject alloc] init]; [ob1 setId_Object:1; [ob1 setNam

我正在尝试对该对象的数组进行文件归档:

MyObject.h

@interface MyObject : NSObject

@property (assign) int id_object;
@property (nonatomic, strong) NSString *name;

@end
例如,在我的第一个数组中,我有一些MyObject:

MyObject *ob1 = [[MyObject alloc] init];
[ob1 setId_Object:1;
[ob1 setName:@"Carl"];

MyObject *ob2 = [[MyObject alloc] init];
[ob2 setId_Object:2;
[ob2 setName:@"Carl"];

MyObject *ob3 = [[MyObject alloc] init];
[ob3 setId_Object:3;
[ob3 setName:@"Carl"];

NSArray *firstArray = [[NSArray alloc] initWithObjects:ob1,ob2,ob3,nil];
然后我想用NSPredicate和NSNumber数组筛选此数组,如下所示:

NSArray *secondArray = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],nil];
我试过这个:

 NSArray *filteredObject = [firstArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"id_object IN %@",secondArray]];
但是filteredObject是空的,我怎么办?

一旦检查这个

 NSArray *filteredObject = [questionSections filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self.Carl contains %@ OR self.Carl contains %@ ",@"1",@"2"]];
例:-

O/p:--

试着替换

@property (nonatomic, copy) NSNumber* id_object;
@property (nonatomic, copy) NSString *name;
而不是

@property (assign) int id_object;
@property (nonatomic, strong) NSString *name;

似乎你的测试用例是错误的。我不认为你的setId_对象做了你认为它做的事,当用一个NSNumber调用它时

[ob1 setId_object:[NSNumber numberWithInt:1]];
NSLog(@"%d", ob1.id_object);

> 391

[ob1 setId_object:1];
NSLog(@"%d", ob1.id_object);

> 1
替换初始化会使测试用例正常运行

编辑:我的测试用例,剪切粘贴

MyObject *ob1 = [[MyObject alloc] init]; ob1.id_object = 1; [ob1 setName:@"Carl"];
MyObject *ob2 = [[MyObject alloc] init]; ob2.id_object = 2; [ob2 setName:@"Carl"];
MyObject *ob3 = [[MyObject alloc] init]; ob3.id_object = 3; [ob3 setName:@"Carl"];

NSArray *firstArray = [[NSArray alloc] initWithObjects:ob1,ob2,ob3,nil];
NSArray *secondArray = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],nil];

NSArray *filteredObject = [firstArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"id_object IN %@",secondArray]];

NSLog(@"%@", filteredObject);

>>> <MyObject: 0x100110350> {1,"Carl"}
>>> <MyObject: 0x1001104b0> {2,"Carl"}
MyObject*ob1=[[MyObject alloc]init];ob1.id_object=1;[ob1集合名:@“卡尔”];
MyObject*ob2=[[MyObject alloc]init];ob2.id_object=2;[ob2集合名:@“Carl”];
MyObject*ob3=[[MyObject alloc]init];ob3.id_object=3;[ob3集合名:@“Carl”];
NSArray*firstArray=[[NSArray alloc]initWithObjects:ob1、ob2、ob3、nil];
NSArray*secondArray=[NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],nil];
NSArray*filteredObject=[firstArray FilteredArray UsingPredicate:[NSPredicate predicateWithFormat:@“id\u对象在%@”,secondArray]];
NSLog(@“%@”,过滤器对象);
>>>{1,“卡尔”}
>>>{2,“卡尔”}

向我们显示firstArray数组数据。我已编辑完毕。您需要传递字符串而不是数组。字符串是什么?你能回答这个问题吗?这只是一个例子,我用另一种方式填充firstArray,但我很确定数组包含正确的值,我的问题只是关于如何过滤该数组…你能回答这个问题吗?@Piero进行小的修复可以让你的代码为我以正确的结果运行。我可以添加完整的测试用例。@Piero用我的测试用例更新了。
[ob1 setId_object:[NSNumber numberWithInt:1]];
NSLog(@"%d", ob1.id_object);

> 391

[ob1 setId_object:1];
NSLog(@"%d", ob1.id_object);

> 1
MyObject *ob1 = [[MyObject alloc] init]; ob1.id_object = 1; [ob1 setName:@"Carl"];
MyObject *ob2 = [[MyObject alloc] init]; ob2.id_object = 2; [ob2 setName:@"Carl"];
MyObject *ob3 = [[MyObject alloc] init]; ob3.id_object = 3; [ob3 setName:@"Carl"];

NSArray *firstArray = [[NSArray alloc] initWithObjects:ob1,ob2,ob3,nil];
NSArray *secondArray = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],nil];

NSArray *filteredObject = [firstArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"id_object IN %@",secondArray]];

NSLog(@"%@", filteredObject);

>>> <MyObject: 0x100110350> {1,"Carl"}
>>> <MyObject: 0x1001104b0> {2,"Carl"}