如何修复 CallKit 目录扩展中的'sqlite3'和其他错误?



该应用程序的想法是向CallKit目录添加大约50000个联系人,但当我尝试在beginRequest(with context: CXCallDirectoryExtensionContext)方法中使用context.addIdentificationEntry(withNextSequentialPhoneNumber: contact.number, label: contact.contactLabel)添加他们时,我经常会收到com.apple.CallKit.error.calldirectorymanager错误2或一些奇怪的sqlite3错误:

sqlite3_step for query 'INSERT INTO PhoneNumberIdentificationEntry 
(extension_id, phone_number_id, label_id) VALUES (?, (SELECT id 
FROM PhoneNumber WHERE (number = ?)), (SELECT id FROM Label WHERE 
(localized_label = ?))), 
…
(SELECT id FROM Label WHERE (localized_label = ?)))' returned 19 
(2067) errorMessage 'UNIQUE constraint failed: 
PhoneNumberIdentificationEntry.extension_id, 
PhoneNumberIdentificationEntry.phone_number_id, 
PhoneNumberIdentificationEntry.label_id'

一般来说,我从服务器上获取联系人,并试图保持它们的同步——因此,我将它们保存在Realm本地。有人知道如何处理这样的错误吗?

由于找不到太多CallKit目录错误的解决方案,我尝试自己修复这些错误。这花了我一些时间,也为其他开发人员节省了一些时间,我试图总结我在实现CallKit目录扩展过程中遇到的所有错误,并为每个错误提供一个建议的解决方案-我不能保证这些解决方案100%有效,但也许它们仍然有帮助!

  • sqlite3_step错误:当我再次尝试同步联系人时,我经常会出现错误,因此我想,这个错误是某种重复错误。由于联系人可能有两个号码,我对两个条目都使用了相同的名称,这基本上是有效的,但我认为如果你对标签使用完全相同的名称时,后台仍然存在某种识别问题。因此,我在标签的末尾添加了每个联系人的索引,以保持它们的唯一性,现在错误不再出现。(即使你所有的联系人只有一个号码,也要记住,可能有一些联系人的名字和姓氏相同。(

  • com.apple.CallKit.error.calldirectorymanager error 2:此错误通常是由于内存问题而出现的。扩展的可用内存比应用程序本身少得多(例如,CallKit目录扩展只有12MB可用(。为了防止这个错误,我使用了一种分页机制,它总是只将特定数量的联系人加载到扩展中,然后重新加载下一个页面。如果你使用Realm,还有两个方面需要考虑:首先,在Realm配置Realm(configuration: Realm.Configuration(fileURL: realmFileURL, objectTypes: [ContactObject.self]))中设置使用的对象类型-这可以防止Realm调用需要大量内存的objc_copyClassList()。第二,如果您筛选特定谓词试图避免在筛选器中使用任何类型引用的领域对象,例如,首先,在将联系人添加到CallKit目录后,我将联系人的号码传递给领域对象的筛选器,以将该联系人标记为同步。但后来我发现,扩展中的内存随着每个同步联系人的增加而增加,因为可能有对联系人对象的某种引用。然后,我提取了完全相同的联系人页面,将它们全部标记为同步,而不是一个接一个地提取,这使我可以在每页加载更多的联系人。提示:如果您想在扩展中使用断点,或者想调试扩展的内存,请进入Xcode到debug->Attach to Process->AppName Call Directory。然后,您可以在调试导航器中选择调用目录,并查看使用的内存量。(您只能在当前使用时附加到扩展进程,以防您在列表中看不到它(

  • com.apple.CallKit.error.calldirectorymanager error 3:联系人号码未排序-在将其添加到目录之前先排序
  • com.apple.CallKit.error.calldirectorymanager错误4:重复条目-确保只添加一次数字

如果我对这些建议中的任何一个有错,请毫不犹豫地纠正我,或者添加更多的提示和解决方案-否则,如果我能提供帮助,我很高兴!

您似乎在添加重复的联系人。只需确保您添加的联系人是唯一的。

相关内容

最新更新