这是故事:
在主应用程序中: - 从我的网络服务中获取一些数字 . 这些数字附加到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 回答
确保不会意外损坏数据 . 共享数据文件意味着可能有多个进程尝试同时使用文件 . iOS上的沙盒意味着这种情况有点罕见,但这并不意味着可以忽略它 . 您可能需要使用“NSFileCoordinator”
你可以在这个地址找到更多的解释性信息:enter link description here
我有同样的问题 . 您必须在Ad-Hoc或Release模式下进行测试!似乎在调试模式下它有时不起作用!