1

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

我的程序员似乎无法弄清楚问题出在哪里,因为他无法最终复制它。有谁知道什么会导致这个问题???

谢谢!

4

1 回答 1

2

崩溃可能是由这一行引起的:

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

... 由于您 iPhone 上地址数据库的特定内容,返回 nil。您需要检查在这段代码中返回的通讯簿中的数据,以准确了解问题出在哪里。

无论如何,每次从通讯录中获取一些数据时,都应该检查其完整性并注意错误。这段代码只是通过始终假设每一行都完美运行来收费。

于 2010-05-03T19:26:23.517 回答