呼叫目录分机的呼叫者 ID 中的 UserDefaults
Posted
技术标签:
【中文标题】呼叫目录分机的呼叫者 ID 中的 UserDefaults【英文标题】:UserDefaults in Call Directory Extension's Caller ID 【发布时间】: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。此外,电话号码按升序排序。
【问题讨论】:
Sharing UserDefaults between extensions的可能重复 感谢您的回复,但我希望您能更好地阅读我写的内容。 @TomE 【参考方案1】:确保您不会意外损坏数据。共享数据文件意味着可能有多个进程同时尝试使用一个文件。 ios 上的沙盒意味着这是一种罕见的情况,但这并不意味着可以忽略它。您可能需要使用“NSFileCoordinator”
你可以在这个地址找到更多的解释信息:enter link description here
【讨论】:
【参考方案2】:我遇到了同样的问题。 您必须在 Ad-Hoc 或 Release 模式下对其进行测试! 好像在调试模式下它有时不起作用!
【讨论】:
以上是关于呼叫目录分机的呼叫者 ID 中的 UserDefaults的主要内容,如果未能解决你的问题,请参考以下文章