呼叫目录分机的来电显示中的UserDefaults

时间:2018-05-23 17:13:52

标签: ios swift xcode callkit caller-id

这就是故事:

在主应用程序中:    - 我的网络服务中提取了一些号码。这些数字附加到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)
        } }
    

这是Call Directory Extension的功能:

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

2 个答案:

答案 0 :(得分:0)

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

您可以在此地址找到更多解释性信息:enter link description here

答案 1 :(得分:0)

我遇到了同样的问题。 您必须在Ad-Hoc或Release模式下进行测试! 似乎在调试模式下,它有时无法正常工作!