NSRange странное поведение - PullRequest
2 голосов
/ 11 марта 2011

У меня странное поведение 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 на устройстве и ноль в симуляторе.

Я что-то не так делаю?

1 Ответ

1 голос
/ 11 марта 2011

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

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

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

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

...