无论我做什么,Swift中的ABPersonHasImageData总是返回false
我刚开始学习斯威夫特,我在这一点上绊倒了。我想获得方法中联系人的联系人图像无论我做什么,Swift中的ABPersonHasImageData总是返回false,swift,ios8,xcode6,Swift,Ios8,Xcode6,我刚开始学习斯威夫特,我在这一点上绊倒了。我想获得方法中联系人的联系人图像 func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier) 我首先检查联系人是否有图像,然后用 if(ABPers
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!, property: ABPropertyID, identifier: ABMultiValueIdentifier)
我首先检查联系人是否有图像,然后用
if(ABPersonHasImageData(person))
{
let avatar : NSData = ABPersonCopyImageDataWithFormat(person, kABPersonImageFormatThumbnail).takeRetainedValue()
}
问题是,它在模拟器中总是返回false。还不能在我真正的手机上尝试。
我做错了什么?没有错误。从联系人中提取所有其他信息效果很好。刚刚我自己修复了它。在工作中尝试之后,我比较了代码,发现我遗漏了一件事,这使它能够工作: 这一行:
pickerController.displayedProperties = [NSNumber(int: kABPersonPhoneProperty)]
我从未想过这是个问题,因为联系人视图中显示的图像。当然,我现在需要知道如何将联系人的UIImage包括在该列表中,但由于它不像KabbersonPhoneProperty
那样可用,我真的不知道如何做到这一点
可能是虫子吧?难道我不应该得到图像,即使上面的一行排除了一切,但电话号码
我的解决办法是实施
func peoplePickerNavigationController(peoplePicker: ABPeoplePickerNavigationController!, didSelectPerson person: ABRecord!) {
//get the image, then hide everything except phone numbers
}
然后在下一步中定义“联系人”视图中隐藏的内容。但那不是很好,是吗
也许有人知道更好的解决办法。非常感谢 看来这里毕竟没有问题。我只是再次尝试了我的第一篇文章的代码,它起了作用。在我的设备和同一个模拟器上 由于我第一次遇到这个问题,我重新安装了Xcode,也许在我没有注意到的情况下解决了它。奇怪的虫子
尽管如此:(非)问题还是解决了 我猜您总是从
ABPersonHasImageData
收到false
的原因是您的代码没有权限访问任何通讯簿数据,用户明确选择的数据除外(电话号码,在您的情况下)
要请求权限,请将您的presentViewController:…
包装在ABAddressBookRequestAccessWithCompletion
中(或者在尝试访问图片之前,在其他点获取权限)
e、 g
在真正的设备上试用。在真正的设备上似乎对我来说很好。谢谢,我会尝试一下,首先用一个新项目做了一个测试,似乎在那里工作,甚至在模拟器中。我先去检查我的其他代码;)不要依赖模拟器作为可靠的试验台。如果您得到了意想不到的结果,请在真正的硬件上运行它。这是痛苦经历的声音。谢谢;)但当时它甚至不能在真正的iPhone上运行……有人有什么想法吗?
ABAddressBookRequestAccessWithCompletion(nil) {
(granted:Bool, err:CFError!) in
dispatch_async(dispatch_get_main_queue()) {
if granted {
// TODO: present ABPeoplePickerNavigationController etc.
}
}
}