Mit*_*tim 2 sqlite ios swift callkit
context.addIdentificationEntry(withNextSequentialPhoneNumber: contact.number, label: contact.contactLabel)\n该应用程序的想法是将大约 50.000 个联系人添加到 CallKit 目录中,但是当我尝试在方法中添加它们时,beginRequest(with context: CXCallDirectoryExtensionContext)我经常会收到 com.apple.CallKit.error.calldirectorymanager 错误 2 或一些奇怪的 sqlite3 错误:
sqlite3_step for query \'INSERT INTO PhoneNumberIdentificationEntry \n(extension_id, phone_number_id, label_id) VALUES (?, (SELECT id \nFROM PhoneNumber WHERE (number = ?)), (SELECT id FROM Label WHERE \n(localized_label = ?))), \n\xe2\x80\xa6\n(SELECT id FROM Label WHERE (localized_label = ?)))\' returned 19 \n(2067) errorMessage \'UNIQUE constraint failed: \nPhoneNumberIdentificationEntry.extension_id, \nPhoneNumberIdentificationEntry.phone_number_id, \nPhoneNumberIdentificationEntry.label_id\'\nRun Code Online (Sandbox Code Playgroud)\n\n一般来说,我从服务器获取联系人并尝试使它们保持同步 - 因此,我使用 Realm 将它们保存在本地。有谁知道如何处理此类错误?
\n由于我找不到太多 CallKit Directory 错误的解决方案,因此我尝试自己修复错误。我花了一些时间,为了为其他开发人员节省一些时间,我尝试总结在 CallKit 目录扩展实现过程中遇到的所有错误,并为每个错误提供建议的解决方案 - 我不能保证这些解决方案 100% 有效,但是也许他们仍然可以提供帮助!
\n\n\n\nsqlite3_step 错误:当我尝试再次同步联系人时,我经常收到错误,因此我猜该错误是某种重复错误。由于联系人可能有两个号码,因此我对两个条目使用了相同的名称,这基本上有效,但我认为如果您对标签使用完全相同的名称,则后台仍然存在某种识别问题。因此,我在标签末尾添加了每个联系人的索引,以保持它们的唯一性,现在错误不再出现。(即使您的所有联系人都只记住一个号码,也可能有一些联系人具有相同的名字和姓氏。)
com.apple.CallKit.error.calldirectorymanager 错误2:此错误经常由于内存问题而出现。扩展程序的可用内存比应用程序本身少得多(CallKit 目录扩展程序的可用内存例如只有 12 MB)。为了防止此错误,我使用了分页机制,该机制始终仅将特定数量的联系人加载到扩展中,然后重新加载下一页。如果您使用 Realm,还需要考虑两个方面:首先,在 Realm 配置中设置使用的对象类型Realm(configuration: Realm.Configuration(fileURL: realmFileURL, objectTypes: [ContactObject.self]))- 这可以防止 Realm 调用objc_copyClassList()需要大量内存。其次,如果您过滤特定谓词尝试避免在过滤器中使用任何类型的引用的领域对象 - 例如,首先,将联系人添加到 CallKit 目录后,我将联系人的号码传递给领域对象将该联系人标记为已同步。但后来我发现扩展中的内存随着每个同步联系人的增加而增加,因为可能存在对联系人对象的某种引用。然后,我获取了完全相同的联系人页面,将它们全部标记为同步,而不是逐一获取它们,这使我可以在每页加载更多联系人。提示:如果您想在扩展中使用断点或想调试扩展的内存,请在 Xcode 中进行调试 -> 附加到进程 -> AppName 调用目录。然后您可以在调试导航器中选择调用目录并查看已使用的内存量。(您只能在当前使用扩展进程时附加它 - 以防万一您可以\xe2\x80\x99在列表中看到它)
如果我对这些建议有任何错误,请随时纠正我,或者添加更多提示和解决方案 - 否则,如果我能提供帮助,我很高兴!
\n