【发布时间】: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 检查此代码
-
能否在您的问题中添加堆栈跟踪和/或错误消息。