这是故事:
在主应用程序中: - 一些数字是从我的网络服务中获取的。这些数字附加到 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。而且,电话号码按升序排序。