iPhone: доступ к составному имени в адресной книге вызывает EXC_BAD_ACCESS - PullRequest
1 голос
/ 03 мая 2010

Я новичок в разработке для 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 Ответ

2 голосов
/ 03 мая 2010

Сбой, вероятно, вызван этой строкой:

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

... возвращает ноль из-за конкретного содержимого вашей адресной базы данных на вашем iPhone. Вам нужно будет изучить данные из адресной книги, возвращаемой в этом фрагменте кода, чтобы точно определить, в чем проблема.

В любом случае, каждый раз, когда вы извлекаете какие-либо данные из адресной книги, вы должны проверять ее целостность и следить за ошибками. Этот код просто выполняет проверку, предполагая, что каждая строка работает отлично.

...