NSRange 奇怪的行为

发布于 2024-10-21 15:03:04 字数 625 浏览 5 评论 0原文

我的设备(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];
}

如果某些属性的 range.lenght 值为零,则该属性在设备上等于 2,在模拟器中等于 0。

我做错了什么吗?

I have strange NSRange behavior on my device (iPhone iOS 4.3). This code has a different behavior on device and simulator.

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

If some of properties has nil value range.lenght for that property is equal to 2 on device and zero in simulator.

Am I doing something wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

零度℉ 2024-10-28 15:03:04

Objective-C 编程语言

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

  • 如果该方法返回一个对象,则
    发送到 nil 的消息返回 0 (nil)。
    例如: 人 *motherInLaw =
    [[a人配偶]母亲];如果
    这里的配偶对象为零,然后是母亲
    被发送到 nil 并且该方法返回
    零。
  • 如果该方法返回任何指针
    类型,任何大小小于的整数标量
    大于或等于 sizeof(void*),a
    float、double、long double 或
    long long,然后发送一条消息给nil
    返回 0。
  • 如果该方法返回
    结构体,由 Mac OS X ABI 定义
    返回的函数调用指南
    注册,然后向 nil 发送一条消息
    为每个字段返回 0.0
    结构。其他结构数据类型将
    不能用零填充
  • 如果
    方法返回除
    前面提到的值类型,返回
    发送到 nil 的消息的值为
    未定义。

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

The Objective-C Programming Language

The value returned from a message to
nil may also be valid:

  • If the method returns an object, then
    a message sent to nil returns 0 (nil).
    For example: Person *motherInLaw =
    [[aPerson spouse] mother]; If the
    spouse object here is nil, then mother
    is sent to nil and the method returns
    nil.
  • If the method returns any pointer
    type, any integer scalar of size less
    than or equal to sizeof(void*), a
    float, a double, a long double, or a
    long long, then a message sent to nil
    returns 0.
  • If the method returns a
    struct, as defined by the Mac OS X ABI
    Function Call Guide to be returned in
    registers, then a message sent to nil
    returns 0.0 for every field in the
    struct. Other struct data types will
    not be filled with zeros
    .
  • If the
    method returns anything other than the
    aforementioned value types, the return
    value of a message sent to nil is
    undefined.

It's for Mac OS X but I think it's safe to say that you should not rely on returned struct values if message target is nil.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文