我的设备上有奇怪的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];
}
如果某些属性的nil值为range.lenght,则该属性在设备上等于2,在模拟器中为零。
我做错了吗?
答案 0 :(得分:1)
The Objective-C Programming Language
从邮件返回的值 零也可能有效:
- 如果方法返回一个对象,那么 发送给nil的消息返回0(nil)。 例如:Person * motherInLaw = [[aPerson配偶]母亲];如果 这里的配偶对象是零,然后是母亲 被发送到nil并且方法返回 零。
- 如果方法返回任何指针 type,任何大小较小的整数标量 大于或等于sizeof(void *),a 浮动,双重,长双,或 很长,然后发送给nil的消息 返回0.
- 如果方法返回a 结构,由Mac OS X ABI定义 函数调用指南将被退回 寄存器,然后发送给nil的消息 为每个字段返回0.0 结构。其他结构数据类型将 不要用零填充。
- 如果 方法返回除了之外的任何内容 上述价值类型,回报 发送给nil的消息的值是 未定义。
适用于Mac OS X,但我认为如果消息目标为零,则不应该依赖返回的struct值。