【问题标题】:UserDefaults in Call Directory Extension's Caller ID呼叫目录分机的呼叫者 ID 中的 UserDefaults
【发布时间】:2018-05-23 17:13:52
【问题描述】:

故事是这样的:

在主应用程序中: - 一些数字是从我的网络服务中获取的。这些数字附加到 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 中的值(域:GROUP_NAME,用户:kCFPreferencesAnyUser,ByHost:是,容器:(null),需要刷新的内容:是):仅将 kCFPreferencesAnyUser 与容器一起使用允许系统容器,从 cfprefsd 分离

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

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

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

【问题讨论】:

标签: ios swift xcode callkit caller-id


【解决方案1】:

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

你可以在这个地址找到更多的解释信息:enter link description here

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-30
      相关资源
      最近更新 更多