Objective c 使用NSPredicate筛选NSNumber的NSArray和NSArray的对象NSArray
我正在尝试对该对象的数组进行文件归档: MyObject.hObjective 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
@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"}