iOS AddressBook - 获取联系人图片崩溃

Posted

技术标签:

【中文标题】iOS AddressBook - 获取联系人图片崩溃【英文标题】:iOS AddressBook - get contact image crash 【发布时间】:2016-04-27 13:43:29 【问题描述】:

AddressBook 存在一些问题,我无法重现,代码在我的 iPhone 和 iPad 上运行,这发生在客户端手机上并导致应用程序崩溃。据我所见,Crashlytics 问题应该在以下行:

let data = ABPersonCopyImageDataWithFormat(contact, kABPersonImageFormatThumbnail).takeRetainedValue()

阅读通讯录完整代码如下:

    var err : Unmanaged<CFError>? = nil
    let addressBookRef : ABAddressBook? = ABAddressBookCreateWithOptions(nil, &err).takeRetainedValue()
    if addressBookRef == nil 
        print(err)
        return
    

    let contacts = ABAddressBookCopyArrayOfAllPeople(addressBookRef).takeRetainedValue() as NSArray as [ABRecord]
    for contact in contacts 
        let firstName = ABRecordCopyValue(contact, kABPersonFirstNameProperty)?.takeRetainedValue() as? String
        let lastName = ABRecordCopyValue(contact, kABPersonLastNameProperty)?.takeRetainedValue() as? String

        var image: UIImage?
        if ABPersonHasImageData(contact) 

            let data = ABPersonCopyImageDataWithFormat(contact, kABPersonImageFormatThumbnail).takeRetainedValue()
            if let img = UIImage(data: data) 
                image = img
            

        


        …

您有什么建议可以在客户电话上发生,以便我可以重现此错误吗?是否有可能某些联系人已损坏?我该如何处理?

我已经看到这个帖子 Get ios contact image with ABPersonCopyImageData ABPersonCopyImageData 可能返回 nil,我试图处理它,但应用程序仍然崩溃。

【问题讨论】:

你能输入“试图处理那个”的代码吗?链接的帖子看起来正在正确处理可选数据。 您应该尝试使用 nil image contact 检查此代码 能否在您的问题中添加堆栈跟踪和/或错误消息。 【参考方案1】:

检查所有为零。如果 ABPersonCopyImageDataWithFormat 返回 nil,则在 nil 上调用 takeRetainedValue。然后也用它 nil 来创建图像

guard let CFData = ABPersonCopyImageDataWithFormat(contact, kABPersonImageFormatThumbnail) else 
    print("no cfdata")
    return


if let data = CFData.takeRetainedValue 
     if let img = UIImage(data: data) 
         image = img
     

【讨论】:

【参考方案2】:

也许您应该测试数据本身而不是 UIImage,并初始化 UIImageView 而不是 UIImage。

if let data = ABPersonCopyImageDataWithFormat(contact, kABPersonImageFormatThumbnail).takeRetainedValue()
    image = UIImage(data: data)

【讨论】:

以上是关于iOS AddressBook - 获取联系人图片崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iOS 7 Addressbook 和 NSMutableArray 与 UITableView 获取名称和号码

使用 AddressBook 框架时,iOS 11 上的应用程序崩溃?

iOS-获取通讯录联系人信息

使用 iOS Addressbook api 搜索交换联系人

如何从联系人中获取联系人图片 URL?

IOS AddressBook Contacts真实设备上的Null问题