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