ios - 使用联系人框架缓慢获取联系人

标签 ios frameworks swift2 xcode7

我使用的是 Xcode 7.3 和 Swift 2.2。我正在尝试获取设备的所有联系人并将其存储在数组中。它在模拟器上运行良好,但在设备(具有 378 个触点)上测试时非常慢。完成此操作大约需要 20-25 秒。我设置了多个断点,发现从手机获取联系人需要花费最多时间。使用表格 View 显示创建的阵列中的联系人根本不需要时间。这是我的代码,

 var results: [CNContact] = []

 func retrieveContactsWithStore() {
    let contactStore = CNContactStore()
    var i = 0
    var allContainers: [CNContainer] = []
    do {
        allContainers = try contactStore.containersMatchingPredicate(nil)
    } catch {
        print("Error fetching containers")
    }


    for container in allContainers {
        let fetchPredicate = CNContact.predicateForContactsInContainerWithIdentifier(container.identifier)

        do {
            let containerResults = try contactStore.unifiedContactsMatchingPredicate(fetchPredicate, keysToFetch: [
                CNContactGivenNameKey, CNContactFamilyNameKey, CNContactPhoneNumbersKey])
            results.appendContentsOf(containerResults)
        } catch {
            print("Error fetching results for container")
        }
    }

这就是我填充表格 View 的方式。

     override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {


    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)


    cell.textLabel?.text = results[indexPath.row].givenName
    cell.detailTextLabel?.text = ((results[indexPath.row].phoneNumbers[0].value as? CNPhoneNumber)?.valueForKey("digits") as? String)

    return cell
}

在调试导航器中,CPU 利用率也飙升至 98-99%,能源影响 - 非常高。获取联系人后,这些值将返回正常值。

事实证明,获取 CNContactPhoneNumbersKey 需要花费很多时间。只需获取 CNContactGivenNameKey 就可以很快。(2-3 秒)。我们有解决办法吗?

最佳答案

框架或代码没有任何问题。我在其他设备上测试了代码,效果很好。它能够在不到一秒的时间内获取近 900 个联系人。

所以问题是特定于设备的,重新安装 iOS 并恢复设备作为新 iPhone 解决了该问题。

如果其他人遇到类似问题,只需备份您的重要内容(例如联系人、照片等)并重新安装 iOS 并将设备恢复为新 iPhone。

关于ios - 使用联系人框架缓慢获取联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37940689/

相关文章:

ios - 有没有办法在不发送 "Your Turn"推送通知的情况下更新 GKTurnBasedMatch 中的 matchData?

ios - UITableViewCell 和 UIViewController 的简洁开发模式

objective-c - 寻找 cocoa 谷歌地图包装器框架

protocols - 类继承的好处,什么时候可以使用协议(protocol)扩展?

ios - 将设备添加到由 Xcode 管理的供应配置文件

ios - Firebase 数据库未上传

ios - 如何链接伞形框架中的子框架?

ios - 使用 LinkedinSwift 的 LinkedIn 登录突然无法正常工作

ios - 你如何在 swift 2 中执行 println()

arrays - SortInPlace 未按预期工作