проблема с проверкой, существует ли объект в массиве или нет? - PullRequest
3 голосов
/ 19 апреля 2011

Здесь я пытаюсь добавить объект в массив и проверяю, существует ли объект в массиве или нет.для этого я использую следующий код ..

NSInteger ind = [arrActionList indexOfObject:indexPath];
if (ind >= 0 ) {
    [arrActionList removeObjectAtIndex:ind];
}
else {
    [arrActionList addObject:indexPath];
}

Здесь я предполагаю, что я поступаю правильно ... сначала я проверяю индекс.Если это> = 0, я удаляю объект, иначе добавляю новый объект.

Моя проблема в том, что если не найден индекс для объекта, он присваивает значение мусора моей целочисленной переменной.Я полагаю, это должно быть -1, но это не моя следующая строка, в которой я убираю ошибку при броске объекта.

ind = 2147483647

Любая помощь ...

Ответы [ 2 ]

9 голосов
/ 19 апреля 2011

Официальная документация может быть полезной.

В двух словах, indexOfObject: возвращает константу NSNotFound, если указанный объект отсутствует в массиве.Константа NSNotFound имеет значение 0x7FFFFFFF, которое равно 2147483647 в десятичном виде.

Ваш код должен вести себя правильно, если вы:

NSInteger ind = [arrActionList indexOfObject:indexPath];
if (ind != NSNotFound) {
    [arrActionList removeObjectAtIndex:ind];
}
else {
    [arrActionList addObject:indexPath];
}
7 голосов
/ 19 апреля 2011

Если вам не нужно значение ind позже, вы можете просто написать;

if ( [arrActionList containsObject:indexPath] ) {
     [arrActionList removeObject:indexPath;
}
else {
    [arrActionList addObject:indexPath];
}

В качестве альтернативы вместо проверки ind> = 0 используйте

if (ind != NSNotFound) { ...

потому что это то, чем на самом деле является значение 2147483647 - это вовсе не «мусорное» значение, оно говорит вам нечто полезное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...