将NSNumber转换为NSInteger

时间:2012-04-08 12:05:43

标签: iphone objective-c cocoa-touch

我正在尝试确定数组中的值是什么,然后在数组上实现更改,但我首先无法访问数组...

NSNumber *row = [NSNumber numberWithInt:recognizer.view.tag];
    NSInteger *newRow = [row integerValue];
    NSInteger *index = [selectedItems indexOfObject:row];//0=Not selected 1=selected;
    NSLog(@"%@ & ",row);
    if (index == 0) {
        [selectedItems removeObjectAtIndex:newRow];
        [selectedItems insertObject:@"1" atIndex: newRow];
        [(UITableViewCell *)(recognizer.view) setAccessoryType:UITableViewCellAccessoryCheckmark];
    } else {
        [selectedItems removeObjectAtIndex: newRow];
        [selectedItems insertObject:@"0" atIndex: newRow];;
        [(UITableViewCell *)(recognizer.view) setAccessoryType:UITableViewCellAccessoryNone];
    }

正如您所看到的,我正在尝试从行变量中获取信息,这是一个NSNumber,并使用索引变量查找数组的值。我也在我的onload()中声明了这个......

selectedItems = [NSArray arrayWithObjects: 0, 0, 0, nil];

问题在于我得到所有这些警告说......

Incompatible integer to pointer conversion initializing 'NSInteger *' (aka 'int *') with an expression of type 'NSUInteger' (aka 'unsigned int'); 

每当我使用varaibles row或newRow时。正如您所看到的,newRow只是一个整数行。我做错了什么?

2 个答案:

答案 0 :(得分:50)

NSInteger只是int的typedef,因此它不是对象类型,它是标量,您不必将其声明为指针类型。使用

NSInteger newRow = [row integerValue];

代替。

答案 1 :(得分:2)

NSInteger是基元,而不是对象类型。诸如数组之类的集合只能包含对象,例如NSNumber。

您可以使用-integerValue等方法从NSNumber获取原始值。请注意,您通常不想创建NSInteger指针(NSInteger *),只需要一个NSInteger。

recognizer.view.tag获取NSNumber,然后在该NSNumber上调用-integerValue也没有意义。只需直接使用recognizer.view.tag作为整数值。 (您仍然可以将其分配给本地变量以便快速访问。)