2015-02-08 55 views
0

我想使用嵌入式框架中包含的通用模块来共享iOS和WatchKit扩展之间的数据。通用模块类具有与App Group一起保存在NSUserDefault中的共享数据。嵌入式框架内的应用程序组不能共享

但是,当从WatchKit扩展中读取时,我在iOS应用程序中写入App Group共享的内容不会被看到。

我已经在两个目标中启用了具有相同组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

简化到只需保存布尔NSUserDefaults的以在iOS应用程序,然后试图在观看阅读的最基本的层面后,我发现读还是失败了。

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

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

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

+0

我发现第一次添加一个应用程序组令人难以置信的繁琐和无证。你应该提交一个错误报告,我很乐意复制它 – phillfarrugia 2015-02-08 10:59:47

相关问题