[英]Sharing data between an notification service extension and main app
在我的方案中,我在父iOS应用程序和通知服务扩展之间共享数据。 我正在使用Xcode 10.2.1,iOS部署目标10.0
我们已经尝试了NSUserDefaults和Keychain组,它按预期工作。 将通知服务扩展(TargetB)中的值(存储模型或数据类型)保存到MainApp(TargetA)的任何其他方法。
一旦应用程序处于终止状态,我们便将值附加到了模型中,并将其保存在钥匙串中。
要保存到Keycahin:
NotificationAPI.shared.NotificationInstance.append(Notifications(title: messageTitle, message: messageBody,date: Date()))
let notification = NotificationAPI.shared.NotificationInstance
let value = keychain.set(try! PropertyListEncoder().encode(notification), forKey: "Notification")
对于USerDefault:
var defaults = NSUserDefaults(suiteName: "group.yourappgroup.example")
当应用程序处于非活动状态时,我想将数据从目标B传输到目标A。 另一个要传输或保存数据? 请帮我?
在VC中添加以下属性。
var typeArray = [DataModelType]()
let path = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.ABC.app")?.appendingPathComponent("type.plist")
您要共享的数据模型
struct DataModelType: Codable {
//define properties which you wanna use.
}
向ViewController添加扩展
extension ViewController {
fileprivate func saveData() {
let encoder = PropertyListEncoder()
do{
let dataEncode = try encoder.encode(typeArray)
try dataEncode.write(to:path!)
}
catch{
print("Error")
}
}
fileprivate func loadData() {
if let data = try? Data(contentsOf: path!) {
let decoder = PropertyListDecoder()
do {
typeArray = try decoder.decode([DataModelType].self, from: data)
}
catch {
print("Error")
}
}
}
func fetchDataModel() -> DataModelType {
loadData()
return typeArray
}
}
在扩展名中,无论您要访问数据的位置,添加以下代码。
let viewController = ViewController()
let currentDataModel = viewController.fetchDataModel()
也许我没有正确回答问题。
您可以通过CoreData在应用之间共享数据:
在这里解释。
通常,您需要将扩展程序和主应用程序添加到一个组中,并在扩展程序的目标中添加xcdatamodeled文件。
我认为UserDefaults,Keychain,CoreData,iCloud以及从其他应用程序那里将数据存储到您的后端就是您拥有的所有选项。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.