У меня странное поведение NSRange на моем устройстве (iPhone iOS 4.3). Этот код имеет различное поведение на устройстве и симуляторе.

for (Location *location in locationArray)
{
    NSRange range1 = [location.name rangeOfString:searchText options:NSCaseInsensitiveSearch];
    NSRange range2 = [location.streetAddress rangeOfString:searchText options:NSCaseInsensitiveSearch];
    NSRange range3 = [location.postalCode rangeOfString:searchText options:NSCaseInsensitiveSearch];

if (range.length1 > 0 | range2.length > 0 | range3.length > 0)
    [self.filteredList addObject:location];
}

Если какое-то из свойств имеет нулевое значение, range.lenght для этого свойства равно 2 на устройстве и нулю в симуляторе.

Я делаю что-то неправильно?

2
iPera 11 Мар 2011 в 18:56

1 ответ

Язык программирования Objective-C

Значение, возвращаемое из сообщения в nil, также может быть допустимым:

  • Если метод возвращает объект, то сообщение, отправленное на nil, возвращает 0 (nil). Например: Человек *свекровь = [[супруга] мать]; Если объект супруга здесь нулевой, затем мать отправляется в ноль, и метод возвращает ноль.
  • Если метод возвращает любой указатель тип, любой целочисленный скаляр размера меньше больше или равно sizeof(void*), a float, double, long double или a долго долго, затем сообщение отправляется на ноль возвращает 0.
  • Если метод возвращает структура, как определено Mac OS X ABI Руководство по вызову функций должно быть возвращено в регистрирует, то сообщение отправляется на ноль возвращает 0,0 для каждого поля в структура. Другие типы данных структуры будут не заполняться нулями.
  • Если метод возвращает что-либо, кроме вышеупомянутые типы значений, возврат значение сообщения, отправленного на nil, равно неопределенный.

Это для Mac OS X, но я думаю, можно с уверенностью сказать, что вы не должны полагаться на возвращаемые значения структуры, если цель сообщения равна нулю.

1
hoha 11 Мар 2011 в 23:11