我的应用用户的一部分报告了崩溃。当我象征他们的一个崩溃日志时,我发现有问题的代码是读取的标签。
以下是崩溃日志的输出:
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);
我无法理解最后一行如何导致崩溃,因为我验证它是否小于计数,并从零开始。
这让我有点疯狂,所以欢迎任何想法!
答案 0 :(得分:0)
我有类似的问题。
谁在调用崩溃方法?
检查正在调用的方法和崩溃的方法是否在同一个线程/队列中运行。或者至少所有与AB相关的方法都在同一个队列/线程中运行。
如果是,请检查当您创建所有AB变量的第一个实例时,它们是在同一个线程或队列中创建的。
基本上,您需要始终在同一队列或线程中访问AB函数!
答案 1 :(得分:0)
它可能是一本损坏的地址簿,我有时会看到它。
但在大多数情况下,这是由于在不同的队列或线程中访问AB数据库。