17

我试图确定数组中的值是什么,然后在数组上实现更改,但我一开始就无法访问数组......

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'); 

每当我使用变量行或 newRow 时。如您所见, newRow 只是作为整数的行。我究竟做错了什么?

4

2 回答 2

54

NSInteger 只是一个int类型定义,所以它不是对象类型,它是一个标量,你不必将它声明为指针类型。利用

NSInteger newRow = [row integerValue];

反而。

于 2012-04-08T12:12:30.237 回答
2

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

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

recognizer.view.tag从中获取 NSNumber 并调用该 NSNumber也是没有意义的-integerValue。直接用作recognizer.view.tag整数值即可。(您仍然可以将其分配给局部变量以便快速访问。)

于 2012-04-08T12:10:59.280 回答