У меня странное поведение 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 ответ
Язык программирования 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, но я думаю, можно с уверенностью сказать, что вы не должны полагаться на возвращаемые значения структуры, если цель сообщения равна нулю.
Похожие вопросы
Новые вопросы
ios
iOS - мобильная операционная система, работающая на Apple iPhone, iPod touch и iPad. Используйте этот тег [ios] для вопросов, связанных с программированием на платформе iOS. Используйте связанные теги [target-c] и [swift] для проблем, характерных для этих языков программирования.