我是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);
我的程序员似乎无法弄清楚问题是什么,因为他不能在他的最后复制它。有没有人有任何想法会导致这个问题???
谢谢!
答案 0 :(得分:2)
崩溃的原因可能是这一行:
ABRecordRef myPerson =ABAddressBookGetPersonWithRecordID (addressBook,(ABRecordID)(i));
...由于iPhone上地址数据库的具体内容而返回nil。您需要检查此代码块中返回的通讯簿中的数据,以确切了解问题所在。
在任何情况下,每次从地址簿中获取一些数据时,都应该检查其完整性并观察错误。这段代码只是假设每条线都完美运行。