Так я столкнулся с большой проблемой на работе, потому что у меня было что-то вроде этого в моем коде:Objective C: Неподписанный INT сравнить
int foo = -1;
NSArray *bar = [[NSArray alloc] initWithObjects:@"1",@"2",@"3", nil];
if (foo > [bar count]){
NSLog(@"Wow, that's messed up.");
} else {
NSLog(@"Rock on!");
}
Как вы, наверное, уже знаете, по мне отправляю это, выход:
«Ого, это испортилось».
Из того, что я собираю, цель C преобразует мое отрицательное число в «подписанный» int и, таким образом, убивает мое сравнение.
Я видел другие сообщения об этом, и все они заявили, в чем проблема, но ни один из них не предложил каких-либо простых решений, чтобы получить это сравнение для фактической работы. Кроме того, я в шоке от того, что предупреждений компилятора нет, так как это вызывает серьезные проблемы для меня.
Для этого есть предупреждение для компилятора, но по умолчанию оно не включено. Перейдите на вкладку «Настройки сборки» для своей цели и выполните поиск «Sign Comparison». Включите это предупреждение компилятора. Это может привести к множеству предупреждений. – rmaddy
Возможно, вам захочется пересмотреть то, что должен делать ваш код, поскольку поскольку 'count' является неподписанным, предложение if в основном является мертвой ветвью и может быть удалено. – axiixc
Я повторяю массив, нажимая кнопки «next» или «prev», которые изменяют индексную переменную. Значения массива должны быть циклическими, поэтому, когда индекс меньше 0, он должен быть установлен на последний элемент в массиве. Если индекс больше длины массива, он должен быть равен 0. Таким образом, может быть ситуация, когда индекс равен -1, и я сравниваю его с длиной массива, как показано выше. –