Я пытаюсь обмениваться данными между моим iOS и расширением WatchKit с помощью общего модуля, содержащегося во встроенной инфраструктуре. Общий класс модулей имеет общие данные, хранящиеся в NSUserDefault с группой приложений.Группа приложений внутри встроенной структуры не делится
Однако то, что я пишу на долю группы приложений в приложении iOS, не видно при чтении из расширения WatchKit.
У меня есть группы приложений с одинаковым идентификатором группы в обеих целях. IOS читает и записывает без ошибок, и если Watch пишет данные, он также считывает его обратно без ошибок, но не видит записи, сделанные другим.
Любые мысли, как решить, очень признательны.
public class ShareManager() {
private let sharedKey = “kungFuShare"
public var kungfuFighters:Array<KungFu> = [];
public init() {
readFromShare()
}
public func readFromShare() {
let myData = NSUserDefaults(suiteName: "group.com.27feathers.kungfu"
if let rawData: NSData = myData?.objectForKey(sharedKey) as? NSData
{
var myData: AnyObject? = NSKeyedUnarchiver.unarchiveObjectWithData(rawData);
self.kungfuFighters = myData as? [KungFu] ?? []
}
}
public func writeToShare() {
let myData = NSUserDefaults(suiteName: "group.com.27feathers.kungfu")
let saveData = NSKeyedArchiver.archivedDataWithRootObject(self.kungfuFighters)
myData?.setObject(saveData, forKey: sharedKey)
myData?.synchronize() // same behavior with or without this
}
}
public class KungFu: NSObject, NSCoding {
public var fighterName:String
public init(fighterName:String) {
self.fighterName = fighterName
}
required public init(coder: NSCoder) {
self.fighterName = coder.decodeObjectForKey("fighterName")! as String
super.init()
}
public func encodeWithCoder(coder: NSCoder) {
coder.encodeObject(self.fighterName, forKey: "fighterName")
}
}
Я нашел добавление группы приложений в первый раз невероятно громоздкой и недокументированной. Вы должны представить отчет об ошибке, я был бы рад повторить его – phillfarrugia