我正在尝试使用嵌入式框架中包含的通用模块在iOS和WatchKit扩展之间共享数据。公共模块类具有与应用程序组在NSUserDefault中保存的共享数据。
然而,从WatchKit扩展程序中读取时,我在iOS应用程序中写入应用程序组共享的内容是看不到的。
我在两个目标中都启用了具有相同组ID的应用组。 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")
}
}
答案 0 :(得分:0)
在简化到最基本的级别,只需将Bool保存到iOS应用程序中的NSUserDefaults,然后尝试读取Watch,我发现读取仍然失败。
这促使我在开发人员中心注册了一个新的应用程序组。
然后我更改为适用于iOS和Watch目标的新App组。一旦使用新的应用程序组,一切正常!我现在能够在iPhone应用程序中编写并在Watch中阅读。
我不知道为什么第一个应用程序组没有工作,因为我在创建第二个应用程序时遵循了完全相同的步骤。也许这个beta版的Xcode有一些错误