【问题标题】:Address book crash isn't logical地址簿崩溃不合逻辑
【发布时间】:2012-04-26 11:43:27
【问题描述】:

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

这是崩溃日志的输出:

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);

我无法理解最后一行如何导致崩溃,因为我确认它小于计数,并且它从零开始。

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

【问题讨论】:

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


【解决方案1】:

我也有类似的问题。

谁在调用崩溃方法?

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

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

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

【讨论】:

    【解决方案2】:

    它可能是损坏的通讯录,我有时会看到。

    但在大多数情况下,这是由于在不同的队列或线程中访问 AB 数据库。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 2013-07-05
      相关资源
      最近更新 更多