【问题标题】:Unexpected crash while using looking phone numbers in iPhone address book在 iPhone 通讯簿中使用查找电话号码时意外崩溃
【发布时间】:2010-06-03 15:32:21
【问题描述】:

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

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]: unrecognized selector sent to instance 0x383e72f4”

简而言之,它的行为就好像我的“数字”变量是一个 NSString。虽然我自己编写了上面的代码,但在网络上的许多示例中都可以找到相同的代码。这里有人发现它有什么问题吗?

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

【问题讨论】:

    标签: iphone objective-c ios


    【解决方案1】:

    我认为你应该首先检查 CFArrayGetValueAtIndex() 和 ABRecordCopyValue() 的返回值,以确保你有真正的值,而不是 NULL。

    【讨论】:

    • 我应该提到:这是我的第一个解释,我尝试过,但没有帮助。 (其实我引用的错误信息中包含了实例指针,它不是nil,所以我确定我没有搞砸。)
    猜你喜欢
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 2012-10-27
    • 1970-01-01
    相关资源
    最近更新 更多