我希望使用谓词过滤数组,但我正在弯曲并正确处理数据类型。
首先,我有一个我要过滤的列表:
NSMutableArray *HospitalIDs = [[NSMutableArray alloc]init];
[HospitalIDs addObject: @"1"]; // Must be "id", int & NSInteger not accepted by XCode
[HospitalIDs addObject: @"2"]; // Must be "id", int & NSInteger not accepted by XCode
[HospitalIDs addObject: @"3"]; // Must be "id", int & NSInteger not accepted by XCode
其次,我有一个我想用上面的数组过滤的对象列表: (它被定义为NSMutableArray * HospitalObjects,并预先填充了HospitalObjects)
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF.HospitalID IN %@", HospitalIDs];
[HospitalObjects filterUsingPredicate:predicate];
NSLog(@"%i",[HospitalObjects count]);
//The expected result is 3, but it prints 0.
为什么?
因为第一个数组包含NSString值,但我的HospitalObject.HospitalID的类型为int。
我真的不想将我的对象定义中的HospitalID的数据类型更改为NSString,但我无法过滤整数值,我该怎么办?
我可以在谓词语法中转换数据类型吗?怎么样?
答案 0 :(得分:0)
首先,在NSArray
中存储数字的最佳方法是使用NSNumber
个对象。您只需使用Objective-C literal syntax
NSInteger
转换为NSNumber
即可
[HospitalIDs addObject: @(1)];
[HospitalIDs addObject: @(2)];
[HospitalIDs addObject: @(3)];
然后你的谓词应该没有任何进一步的改变。
答案 1 :(得分:0)
有一个NSNumber类型包含一个对象中的int,float,bools,..
NSMutableArray * hospitalIDs = [[NSMutableArray alloc] init];
[hospitalIDs addObject: @1]; // You can wrap an normal int into an NSNumber jusing @. In some siztuations you have to use @(yourOrdinaryValueTypeVariable)
[hospitalIDs addObject: @2];
[hospitalIDs addObject: @3];
顺便说一下,尝试使用CamelCase正确命名:
SomeClassName
MY_CONSTANT