首页 > 解决方案 > 呼叫目录分机的呼叫者 ID 中的 UserDefaults

问题描述

这是故事:

在主应用程序中: - 一些数字是从我的网络服务中获取的。这些数字附加到 NSUserDefaults。

在呼叫目录分机中:

这是呼叫目录扩展的功能:

private func addAllIdentificationPhoneNumbers(to context: CXCallDirectoryExtensionContext) {

    let (phoneNumbers, labels) = retrievePhoneNumbersToIdentifyAndLabels()

       print(phoneNumbers)
       print(labels)

    for (phoneNumber, label) in zip(phoneNumbers, labels) {
        context.addIdentificationEntry(withNextSequentialPhoneNumber: phoneNumber, label: label)
    }
}

问题:当我尝试在设备的设置中启用呼叫阻止和识别时,它会出现“启用分机错误”错误。而且,在 Xcode 的调试器中,

[用户默认值] 无法读取 CFPrefsPlistSource<0x10fe251d0> 中的值(域:GROUP_NAME,用户:kCFPreferencesAnyUser,ByHost:是,容器:(null),需要刷新的内容:是):仅系统允许将 kCFPreferencesAnyUser 与容器一起使用容器,从 cfprefsd 分离

但这里是故事的有趣部分:

在这些问题之后,不知何故,上述功能中的打印功能运行正常。我的意思是,它可以将电话号码和标签保存到 UserDefaults,也可以从 UserDefaults 中读取。需要澄清的是,我可以在我的扩展程序中访问 UserDefaults。没有问题。

注意:当然,主应用程序和呼叫目录扩展程序的应用程序组都已设置,并且电话号码具有正确的类型别名,即 Int64。而且,电话号码按升序排序。

标签: iosswiftxcodecallkitcaller-id

解决方案


确保您不会意外损坏数据。共享数据文件意味着可能有多个进程同时尝试使用一个文件。iOS 上的沙盒意味着这是一种罕见的情况,但这并不意味着可以忽略它。您可能需要使用“NSFileCoordinator”

您可以在此地址中找到更多说明信息:在此处输入链接描述


推荐阅读