Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无论我做什么,Swift中的ABPersonHasImageData总是返回false_Swift_Ios8_Xcode6 - Fatal编程技术网

无论我做什么,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.
            }
        }
}