0

我正在尝试使用包含在嵌入式框架中的通用模块在我的 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")
    }
}
4

1 回答 1

0

在简化到在 iOS 应用程序中将 Bool 保存到 NSUserDefaults 然后尝试在 Watch 中读取的最基本级别之后,我发现读取仍然失败。

这促使我在开发者中心注册了一个新的应用组。

然后我更改为 iOS 和 Watch 目标的新应用组。使用新的 App Group 后,一切正常!我现在可以在 iPhone 应用程序中书写并在 Watch 中阅读。

我不知道为什么第一个 App Group 不起作用,因为我在创建第二个 App Group 时遵循了完全相同的步骤。也许这个 beta 6.2 版本的 Xcode 有一些问题

于 2015-02-08T05:07:06.800 回答