Xcode 使用ABPeoplePickerNavigationControllerDelegate从ABRecord中获取联系人姓名或图像等数据

Xcode 使用ABPeoplePickerNavigationControllerDelegate从ABRecord中获取联系人姓名或图像等数据,xcode,swift,Xcode,Swift,我想让我的应用程序的用户能够从他们的通讯簿中获取联系人。 我可以演示ABPeoplePickerNavigationController,用户可以选择一个人,然后再次关闭ABPPNC 这就是我用来展示它的代码: let peopleController = ABPeoplePickerNavigationController() peopleController.delegate = self peopleController.predicateForSelectionO

我想让我的应用程序的用户能够从他们的通讯簿中获取联系人。 我可以演示ABPeoplePickerNavigationController,用户可以选择一个人,然后再次关闭ABPPNC

这就是我用来展示它的代码:

    let peopleController = ABPeoplePickerNavigationController()
    peopleController.delegate = self
    peopleController.predicateForSelectionOfPerson = NSPredicate(value: true)
    self.presentViewController(peopleController, animated: true, completion: nil)
调用了peoplePickerNavigationController的didSelectPerson函数,但我不知道如何从ABRecord类型的人那里获取信息。苹果公司说有一些地址簿属性,比如:ABPersonNamePrefixProperty或ABPersonMiddleNameProperty,但我不知道如何使用它

所以基本上我想这样做:

func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!) {

    // What I want to do:
    let name = person.lastName
    let firstName = person.firstName
    let image = person.image
}

如果您使用“ABAddressBookRef”并获取所有联系人,这将很容易。然后,您可以根据需要将其显示给用户,并在将来提供帮助。

经过长时间的搜索,我找到了一个适合我的答案:

    func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!) {

    var firstName: String?
    if   ABRecordCopyValue(person, kABPersonFirstNameProperty) != nil{
        firstName = ABRecordCopyValue(person, kABPersonFirstNameProperty).takeRetainedValue() as? String
    }
    var lastName: String?
    if ABRecordCopyValue(person, kABPersonLastNameProperty){
        lastName = ABRecordCopyValue(person, kABPersonLastNameProperty).takeRetainedValue() as? String
    }

    var pImage: UIImage?
    if person != nil && ABPersonHasImageData(person){
        pImage = UIImage(data: ABPersonCopyImageData(person).takeRetainedValue())

    }


}