objective-c - 地址簿崩溃不合逻辑

标签 objective-c crash exc-bad-access abaddressbook

我的一部分应用程序用户报告了崩溃。当我用符号表示他们的崩溃日志之一时,发现有问题的代码就是读取的标签。

这是崩溃日志的输出:

Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x00000000
Crashed Thread:  0
Thread 0 name:  Dispatch queue: com.apple.main-thread
Thread 0 Crashed:
0   CoreFoundation                  0x33e5004e 0x33e4d000 + 12366
1   CoreFoundation                  0x33e58cfc 0x33e4d000 + 48380
2   Mail my meeting                 0x00002a9c -[Mail_my_meetingAppDelegate initPeople] Mail_my_meetingAppDelegate.m:136)
3   Mail my meeting                 0x0000287a -[Mail_my_meetingAppDelegate application:didFinishLaunchingWithOptions:] (Mail_my_meetingAppDelegate.m:74)

这是代码,第136行是最后一行:
NSString* finalName=[NSString stringWithFormat:@"%@%@%@",firstName,middleName,lastName];
NSString *phoneNumber = nil;
ABMultiValueRef phoneNumbers1 = ABRecordCopyValue(person,kABPersonPhoneProperty);
if (ABMultiValueGetCount(phoneNumbers1) > 0) {
    CFIndex j;
    for (j=0; j < ABMultiValueGetCount(phoneNumbers1); j++) {
        CFStringRef label = ABMultiValueCopyLabelAtIndex(phoneNumbers1, j);

我不明白这最后一行会导致崩溃的原因,因为我确认它少于计数,并且从零开始。

这让我有点发疯,所以欢迎任何想法!

最佳答案

我有类似的问题。

谁在调用崩溃方法?

检查正在调用的方法和崩溃的方法是否在同一线程/队列中运行。或者至少所有与AB相关的方法都在同一队列/线程中运行。

如果是,请检查是否在创建所有AB变量的第一个实例时在同一线程或队列中创建了它们。

基本上,您需要始终在同一队列或线程中访问AB函数!

关于objective-c - 地址簿崩溃不合逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10332706/

相关文章:

objective-c - 不同的 int 值还是相同的? NSLog 的 EXC_BAD_ACCESS

iphone - 显示搜索结果 TableView 时隐藏 UITableView

iphone - 如何让ui始终响应并进行后台更新?

iOS 调试与发布框架

iPad : UITableView issue

在导入 swig 生成的包装器的模块中使用 matplotlib 绘图时 Python 崩溃

android - Android:forceclose应用出现故障后

ios - iPhone 上的 UIPopoverPresentationController 不产生弹出窗口

ios - 使用addObserver时,NSNotificationCenter EXC_BAD_ACCESS?

ios - 导致 EXC_BAD_ACCESS 的 iAd 横幅