在我的场景中,我在父iOS应用程序和通知服务扩展之间共享数据。我使用的是Xcode10.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。当应用程序处于非活动状态时?另一种传输或保存数据?请帮帮我?
发布于 2019-07-23 13:49:57
也许我没有理解正确的问题。
您可以通过CoreData在应用程序之间共享数据:
Here解释了这一点。
通常,您需要将扩展和主应用程序添加到组中,并将xcdatamodeled文件添加到扩展的目标位置。
我认为UserDefaults、Keychain、CoreData、iCloud以及将数据存储到其他应用程序的后端是您拥有的所有选项。
发布于 2019-07-23 14:06:16
在VC中添加以下属性。
var typeArray = [DataModelType]()
let path = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "group.com.ABC.app")?.appendingPathComponent("type.plist")您要共享的DataModel
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()https://stackoverflow.com/questions/57157269
复制相似问题