代码之家  ›  专栏  ›  技术社区  ›  F'x

在iPhone通讯簿中查找电话号码时发生意外崩溃

  •  2
  • F'x  · 技术社区  · 14 年前

    我得到了一个相当意外的结果,代码如下:

    ABAddressBookRef addressBook = ABAddressBookCreate();
    CFArrayRef people = ABAddressBookCopyArrayOfAllPeople(addressBook);
    CFIndex nPeople = ABAddressBookGetPersonCount(addressBook);
    
    NSLog (@"npeople = %d = %d", nPeople, CFArrayGetCount(people));
    for (CFIndex i = 0; i < nPeople; i++)
    {
        ABRecordRef record = CFArrayGetValueAtIndex(people,i);
        ABMultiValueRef numbers = ABRecordCopyValue(record, kABPersonPhoneProperty);
        CFIndex count = ABMultiValueGetCount(numbers);
        NSLog (@"%d %d", i, count);
    }
    

    我从未访问过第二个nslog,它在调用abmultivaluegetcount时崩溃,原因是:

    : *-[nscfstring count]:无法识别的选择器发送到实例0x383E72F4 ** 由于未捕获异常“nsInvalidArgumentException”,正在终止应用程序,原因:“***-[nscfString Count]:无法识别的选择器发送到实例0x383E72F4”

    简而言之,它的行为就像我的“数字”变量是一个nsstring。当我在上面写代码时,在网上的许多例子中都可以找到相同的代码。这里有人发现有什么问题吗?

    哦,还有:它只在发布模式下崩溃(在调试模式下,一切正常)。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Macmade    14 年前

    我认为您应该首先检查cfarrayGetValueatindex()和abrecordCopyValue()的返回值,以确保您有真正的值,而不是空值。