- (void)updateCheckBoxes {
NSArray *availableFuncUnits = _scanner.availableFunctionalUnitTypes;
for(int i = 0; i < [availableFuncUnits count]; i++) {
}
}
如果我在for循环中放置一个断点,那么NSArray *
&#39; availableFuncUnits&#39;是(__NSCFNumber *)(int)0
和(__NSCFNumber *)(long)3
。
该数组应包含以下元素:
enum
{
ICScannerFunctionalUnitTypeFlatbed = 0,
ICScannerFunctionalUnitTypePositiveTransparency = 1,
ICScannerFunctionalUnitTypeNegativeTransparency = 2,
ICScannerFunctionalUnitTypeDocumentFeeder = 3
};
typedef NSUInteger ICScannerFunctionalUnitType;
我不能做到以下几点吗?
if([availableFuncUnits objectAtIndex:i] == ICScannerFunctionalUnitType.ICScannerFunctionalUnitTypeDocumentFeeder) {}
但是它总是给我一个错误,说“&#39;预期的标识符或&#39;(&#39;。
如何正确执行此比较?非常感谢您的帮助!
答案 0 :(得分:3)
我看到两个问题:
1)数组availableFuncUnits
包含NSNumber
个对象。你不能直接将它们与原始类型(NSUInteger
)进行比较。
所以你的if
应该是这样的:
ICScannerFunctionalUnitType type = [availableFuncUnits[i] integerValue]
if(type == ICScannerFunctionalUnitTypeDocumentFeeder){}
在您的代码段中,您正在比较指针,而不是对象。
2)您看到的错误是因为使用枚举的正确方法是:
i = ICScannerFunctionalUnitTypeDocumentFeeder
答案 1 :(得分:1)
您无法在NSArray
中存储整数,因为数组只能包含对象。要将整数转换为数组,必须使用NSNumber
包装:
NSInteger a = 100;
NSInteger b = 200;
NSInteger c = 300;
// Creating NSNumber objects the long way
NSArray *arrayOne = [NSArray alloc] initWithObjects:[NSNumber numberWithInteger:a],
[NSNumber numberWithInteger:b],
[NSNumber numberWithInteger:c], nil];
// Creating NSNumber objects the short way
NSArray *arrayTwo = [[NSArray alloc] initWithObjects:@100, @200, @300, nil];
这与您的问题相关,因为当您从数组中提取NSNumber
个对象时,如果您想将它们与实际整数进行比较,则必须将它们转换回整数(展开它们)。
NSLog(@"%d", [arrayOne firstObject] == 100); // COMPILER WARNING!!!
NSLog(@"%d", [[arrayOne firstObject] integerValue] == 100); // True
NSLog(@"%d", [[arrayTwo lastObject] integerValue] == 200); // False
您的示例中似乎缺少此阶段。
最后,为了将整数值与enum
中的整数值进行比较,无需引用enum
名称,只需使用构成枚举的各个值:
[[arrayTwo lastObject] integerValue] == ICScannerFunctionalUnitTypeFlatbed