Ios 从APContact打开ABPersonViewController

Ios 从APContact打开ABPersonViewController,ios,abaddressbook,Ios,Abaddressbook,我正在使用它帮助我以一种简单的方式使用地址簿。是的,我知道Contacts和ContactsUI框架现在已经存在,但它们是iOS9+,我还想支持iOS8 但是,我的问题是,它只给我一个recordID作为Int来标识联系人。我现在想打开一个ABPersonViewController,查看联系人的详细信息。我需要一个ABRecord来执行此操作。我试着自己解决一些问题,结果是,我遇到了一个EXC\u BAD\u ACCESS错误 let apContact: APContact = ... l

我正在使用它帮助我以一种简单的方式使用地址簿。是的,我知道Contacts和ContactsUI框架现在已经存在,但它们是iOS9+,我还想支持iOS8

但是,我的问题是,它只给我一个recordID作为
Int
来标识联系人。我现在想打开一个
ABPersonViewController
,查看联系人的详细信息。我需要一个
ABRecord
来执行此操作。我试着自己解决一些问题,结果是,我遇到了一个
EXC\u BAD\u ACCESS
错误

let apContact: APContact = ...

let recordId = ABRecordID(apContact.recordID.intValue)
let ab = ABAddressBookCreateWithOptions(nil, nil).takeRetainedValue()
let abRecord = ABAddressBookGetPersonWithRecordID(ab, recordId).takeRetainedValue()

let controller = ABPersonViewController()
controller.displayedPerson = abRecord
navigationController?.pushViewController(controller, animated: true)

欢迎对如何正确操作提出任何建议

我发现问题在于,我真的不知道如何正确使用那些AB*函数返回的非托管。如果我使用TakeUnrepainedValue()而不是takeRetainedValue(),我的问题就解决了。但这会导致内存泄漏吗?