嵌入式框架中的应用程序组不共享

时间:2015-02-08 00:32:04

标签: ios swift frameworks watchkit ios-app-group

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

1 个答案:

答案 0 :(得分:0)

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

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

然后我更改为适用于iOS和Watch目标的新App组。一旦使用新的应用程序组,一切正常!我现在能够在iPhone应用程序中编写并在Watch中阅读。

我不知道为什么第一个应用程序组没有工作,因为我在创建第二个应用程序时遵循了完全相同的步骤。也许这个beta版的Xcode有一些错误