iPhone:在AddressBook中访问复合名称会导致EXC_BAD_ACCESS

时间:2010-05-03 18:50:45

标签: iphone addressbook exc-bad-access

我是iPhone开发的新手,有一个问题,我希望有人可以帮助我。

我有一个程序员为我开发iPhone应用程序,当我在模拟器中运行应用程序时,效果很好。但是当我尝试在我的iPhone上运行它时,我收到一个EXC_BAD_ACCESS错误并且应用锁定了。

查看调试器,它在我的MainController中引用以下代码作为问题:

 -(void)loadAddressBook{
     NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
     addressBookLoaded=1;
    [AddressbookRecord readAllContactTable:[self getDBPath]];
     ABAddressBookRef addressBook = ABAddressBookCreate();
     for(NSUInteger i=1;i<=ABAddressBookGetPersonCount(addressBook);i++) {
         ABRecordRef myPerson =ABAddressBookGetPersonWithRecordID (addressBook,(ABRecordID)(i));
         NSString *name = (NSString*)ABRecordCopyCompositeName(myPerson);
         //save in database
         AddressbookRecord *addObj = [[AddressbookRecord alloc] initWithPrimaryKey:0];
         addObj.ClientName=name;
         [addObj addNewContactEntry];
     }
     addressBookLoaded=2;
     [pool release];
 }

更具体地说,它将此特定行指向问题:

NSString *name =(NSString*)ABRecordCopyCompositeName(myPerson);

我的程序员似乎无法弄清楚问题是什么,因为他不能在他的最后复制它。有没有人有任何想法会导致这个问题???

谢谢!

1 个答案:

答案 0 :(得分:2)

崩溃的原因可能是这一行:

ABRecordRef myPerson =ABAddressBookGetPersonWithRecordID (addressBook,(ABRecordID)(i));

...由于iPhone上地址数据库的具体内容而返回nil。您需要检查此代码块中返回的通讯簿中的数据,以确切了解问题所在。

在任何情况下,每次从地址簿中获取一些数据时,都应该检查其完整性并观察错误。这段代码只是假设每条线都完美运行。