Подтвердить что ты не робот

Преобразование NSNumber в NSInteger

Я пытаюсь определить, какое значение находится в массиве, а затем реализовать изменения в массиве, но я не могу получить доступ к массиву в первую очередь...

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 или newRow. Как вы видите, newRow - это просто строка как целое число. Что я делаю неправильно?

4b9b3361

Ответ 1

NSInteger - это всего лишь typedef для int, поэтому он не тип объекта, это скаляр, вам не нужно объявлять его как тип указателя. Используйте

NSInteger newRow = [row integerValue];

вместо.

Ответ 2

NSInteger - это примитив, а не тип объекта. Такие коллекции, как массивы, могут содержать только объекты, такие как NSNumber.

Вы можете получить примитивное значение из NSNumber, используя методы, такие как -integerValue. Обратите внимание, что вы обычно не хотите делать указатель NSInteger (NSInteger *), вам просто нужен NSInteger.

Также нет смысла принимать recognizer.view.tag, создавая из него NSNumber, а затем вызывающий -integerValue в этом NSNumber. Просто используйте recognizer.view.tag непосредственно как целочисленное значение. (Вы можете назначить его локальной переменной для быстрого доступа.)