首页 文章

呼叫目录分机的呼叫者ID中的UserDefaults

提问于
浏览
0

这是故事:

在主应用程序中: - 从我的网络服务中获取一些数字 . 这些数字附加到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分离

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

在这些问题之后,以某种方式,打印上述功能正常运行的功能 . I mean, it can save phone numbers and labels to UserDefaults and also it can read from UserDefaults. To be clarify, I can reach UserDefaults in my extension. 没问题 .

注意: Of course, app groups of both main app and Call Directory Extension have been set 和电话号码具有正确的类型,即Int64 . 而且,电话号码按升序排序 .

2 回答

  • 0

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

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

  • 0

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

相关问题