アップデート:
への参照を保存する方法に問題があると思いますABRecordRef
。私は現在、配信された値に固執しているだけで、それなど何もしpeoplePickerNavigationController:shouldContinueAfterSelectingPerson:property:identifier:
ていませんCFRetain
。保持する必要があるかどうかは、ドキュメントからは不明です。
私は iPhone アプリに取り組んでおり、AddressBook および AddressBookUI フレームワークを使用してアドレス帳とやり取りします。を使用して、ABPeoplePickerNavigationController
選択するユーザーに連絡先リストを提示し、その結果ABRecordRef
をカスタム クラスのインスタンス変数としてキャプチャしています。
これは、最初の使用ではすべて正常に機能しています。ただし、2回目に連絡先から誰かを選択すると (別の人であっても)、私のアプリはEXC_BAD_ACCESS
への呼び出しで爆発しABRecordCopyValue
ます。ポインターをログに記録していますが、連絡先が選択されるたびに (同じ連絡先が 2 回であっても) 確実に異なります。
この参照の割り当てを解除する方法を理解できません。確かにメモリ リークですが、なぜ 1 回目は正常に動作し、2 回目は正常に動作しないのでしょうか?
実際の呼び出しは次のとおりです。
- (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.