2

我的设备(iPhone iOS 4.3)上有奇怪的 NSRange 行为。此代码在设备和模拟器上具有不同的行为。

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];
}

如果某些属性具有 nil 值 range.lenght 在设备上等于 2,在模拟器中等于 0。

难道我做错了什么?

4

1 回答 1

1

Objective-C 编程语言

从消息返回到 nil 的值也可能是有效的:

  • 如果方法返回一个对象,则发送给 nil 的消息返回 0(nil)。例如:人 *motherInLaw = [[aPerson 配偶] 母亲]; 如果此处的配偶对象为nil,则将mother 发送到nil,并且该方法返回nil。
  • 如果该方法返回任何指针类型、任何大小小于或等于 sizeof(void*)、float、double、long double 或 long long 的整数标量,则发送到 nil 的消息将返回 0。
  • 如果该方法返回一个结构,如 Mac OS X ABI 函数调用指南中定义的那样,将在寄存器中返回,那么发送到 nil 的消息将为结构中的每个字段返回 0.0。其他结构数据类型不会用零填充
  • 如果该方法返回上述值类型以外的任何值,则发送给 nil 的消息的返回值是未定义的。

它适用于 Mac OS X,但我认为可以肯定地说,如果消息目标为 nil,则不应依赖返回的结构值。

于 2011-03-11T20:11:21.173 回答