gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 00:11:37 25 4
gpt4 key购买 nike

我使用的是 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com