1

这是故事:

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

在呼叫目录分机中:

  • 从 UserDefaults 中检索:

    private func retrievePhoneNumbersToIdentifyAndLabels() -> (phoneNumbers: [CXCallDirectoryPhoneNumber], labels: [String]) {
    
        let defaults = UserDefaults.init(suiteName: GROUP_NAME)
    
        let phones = defaults?.array(forKey: "phoneArray") as! [CXCallDirectoryPhoneNumber]
        let names = defaults?.array(forKey: "nameArray") as! [String]
    
        return (phones,names)
        } }
    

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

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。而且,电话号码按升序排序。

4

2 回答 2

0

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

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

于 2018-05-24T08:20:46.553 回答
0

我有同样的问题。您必须在 Ad-Hoc 或 Release 模式下对其进行测试!似乎在调试模式下它有时不起作用!

于 2018-06-09T09:16:23.353 回答