ios - 呼叫目录分机的呼叫者 ID 中的 UserDefaults
问题描述
这是故事:
在主应用程序中: - 一些数字是从我的网络服务中获取的。这些数字附加到 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。而且,电话号码按升序排序。
解决方案
确保您不会意外损坏数据。共享数据文件意味着可能有多个进程同时尝试使用一个文件。iOS 上的沙盒意味着这是一种罕见的情况,但这并不意味着可以忽略它。您可能需要使用“NSFileCoordinator”
您可以在此地址中找到更多说明信息:在此处输入链接描述
推荐阅读
- f# - F# 使用命名元组作为函数参数
- python - 在 Anaconda 的 Windows 上安装 witwidget(google what-if too)时面临问题
- amazon-web-services - WAF 有意义吗?
- jboss - 如何在决策表 Drools 中使用全局列表?决策表中的全局变量
- apache-spark - Spark将毫秒转换为UTC日期时间
- python - 在 matplotlib 3d 中旋转 stl 文件
- azure-devops - Copy pull request description to work item comments on Azure Devops
- css - 其他人编写的自定义主题的wordpress样式问题
- spring - 在 @Around 建议中处理带有和不带有 @RequestBody 的请求
- c# - Redis 无法从 IIS 连接