我認爲問題的關鍵在於我如何儲存參考ABRecordRef
地方。我目前只是將價值掛在peoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:
而不是CFRetain
或其他東西上。目前還不清楚該文件是否需要保留。
我正在研究一個iPhone應用程序,它使用AddressBook和AddressBookUI框架與地址簿連接。我正在使用ABPeoplePickerNavigationController
向用戶顯示聯繫人列表以供選擇,並將結果ABRecordRef
作爲實例變量捕獲到自定義類中。
這一切都工作正常的第一次使用。但是,當我從聯繫人(即使是另一個人)挑選某人時,第,我的應用在撥打ABRecordCopyValue
致電EXC_BAD_ACCESS
。我記錄指針,每次選擇一個聯繫人時(即使是兩次相同的聯繫人),它們也是完全不同的。
我不明白這個引用是如何被釋放的。內存泄漏肯定,但爲什麼它第一次正常工作,而不是第二次?
這裏的實際調用它的死在:
- (NSString*)displayName {
return CFBridgingRelease(ABRecordCopyValue(self.contact, kABPersonFirstNameProperty));
}
這裏的一些調試輸出,如果它可以幫助我們在所有:
Printing description of self->_contact:
(ABRecordRef) _contact = 0x1f582dc0
(lldb) expr (CFTypeRef)ABRecordCopyValue(self.contact, kABPersonFirstNameProperty)
error: Execution was interrupted, reason: EXC_BAD_ACCESS (code=1, address=0xd1f57cc1).
The process has been returned to the state before execution.
是的,我正在返回'NO'。 – devios1