请帮忙。 如何将数据从主机应用程序传输到窗口小部件?我在应用程序和小部件中使用框架中的相同功能。应用程序接收数据,窗口小部件返回一个空数组。
public func readLED() -> [LEDController] {
let defaults = UserDefaults.standard()
if let saved = defaults.object(forKey: "ledControllers") as? NSData {
return (NSKeyedUnarchiver.unarchiveObject(with: saved as Data) as! [LEDController])
}
return []
}
答案 0 :(得分:1)
我为自己的英语水平道歉。
要在apphost和小部件之间共享数据,您应该保存这样的userDefault
数据,例如在静态类中:
class UserDefaultDataHelper: NSObject {
static func saveKeyToGroupApp(_ value: AnyObject?, withKey key:String) -> Void {
UserDefaults(suiteName: "group.com.test")!.set(value, forKey: key)
UserDefaults(suiteName: "group.com.test")!.synchronize()
}
//and to read values
static func loadKeyToGroupApp(_ key:String) -> AnyObject? {
if let loadedValue = UserDefaults(suiteName: "group.com.test")?.object(forKey: key){
return loadedValue as AnyObject?
}
return nil
}
}
并使用:
let ledcontrollerdata = UserDefaultDataHelper.loadKeyToGroupApp("ledControllers")
UserDefaultDataHelper.saveKey(yourData as AnyObject?, withKey: "ledControllers")
只保存这样的数据,您应该从多个应用程序,小部件等共享相同的数据,但前提是这些数据位于" App Groups"使用Bundle ID组。您应该在group.com.test
中使用此Bundle ID组,并且两个项目都应具有各自的权利,并且都在功能中配置目标 - > AppGroups,选择您的AppGroupDomain。
答案 1 :(得分:0)
您无法使用UserDefaults.standard()
在包含的应用和扩展程序之间共享数据。
来自Apple:
即使应用扩展程序包嵌套在其包含内 应用程序包,正在运行的应用程序扩展和包含应用程序没有 直接访问彼此的容器。
...所以
要启用数据共享,请使用Xcode或Developer门户启用 包含应用及其包含的应用扩展程序的应用组。