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

该应用程序的想法是在CallKit目录中添加约50.000个联系人,但是当我尝试在context.addIdentificationEntry(withNextSequentialPhoneNumber: contact.number,label: contact.contactLabel)方法中使用beginRequest(with context: CXCallDirectoryExtensionContext)添加联系人时,我经常会遇到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一起保存在本地。有谁知道如何处理此类错误?

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

似乎您要添加重复的联系人。只要确保您要添加的联系人是唯一的即可。

,

由于找不到CallKit Directory错误的很多解决方案,因此我尝试自己解决这些错误。我花了一些时间并为其他开发人员节省了时间,我尝试总结在实施CallKit Directory Extension期间遇到的所有错误,并为每个错误提供建议的解决方案-我不能保证这些解决方案可以100%正常工作,但是也许他们仍然可以提供帮助!

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

  • com.apple.CallKit.error.calldirectorymanager错误2 :通常由于内存问题而出现此错误。扩展程序比应用程序本身具有更少的可用内存(例如,CallKit Directory Extensions仅具有12 MB可用空间)。为了防止出现此错误,我使用了一种分页机制,该机制始终仅将特定数量的联系人加载到扩展中,然后重新加载下一页。如果使用Realm,则还需要考虑两个方面:首先,在Realm配置Realm(configuration: Realm.Configuration(fileURL: realmFileURL,objectTypes: [ContactObject.self]))中设置使用的对象类型-这样可以防止Realm调用需要大量内存的objc_copyClassList()。其次,如果您过滤特定谓词尝试避免在过滤器中使用任何类型引用的领域对象-例如,首先,将联系人添加到CallKit目录后,我将联系人的编号传递给了领域对象以将该联系人标记为已同步。但是后来我看到扩展中的内存随着每个同步联系人的增加而增加,因为可能存在对联系人对象的某种引用。然后,我获取了与联系人完全相同的页面,以将所有联系人都标记为已同步,而不是一一获取,这使我每页可以加载更多联系人。提示:如果要在扩展中使用断点或要调试扩展的内存,请在Xcode中进行调试->附加到进程-> AppName调用目录。然后,您可以在调试导航器中选择呼叫目录,并查看已使用的内存量。 (您只能在当前使用扩展程序时附加它-以防万一您在列表中看不到它)

  • com.apple.CallKit.error.calldirectorymanager错误3 :联系电话没有排序-请在将其添加到目录之前对其进行排序。
  • com.apple.CallKit.error.calldirectorymanager错误4 :重复的条目-确保仅添加一个号码。

如果我对这些建议中的任何一个有误,请立即纠正我,或者添加其他提示和解决方案-否则,我很高兴能为您提供帮助!

本文链接:https://www.f2er.com/3167880.html

大家都在问