2015-02-08 2 views
0

Я пытаюсь обмениваться данными между моим 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") 
    } 
} 

ответ

0

После упрощения на самом базовом уровне просто экономить Bool, чтобы NSUserDefaults в приложение IOS, а затем пытается прочитать в Дозоре, я обнаружил, что чтение до сих пор не удалось.

Это побудило меня зарегистрировать новую группу приложений в Центре разработчиков.

Затем я перешел на новую группу приложений для iOS и Watch. После использования новой группы приложений все работает! Теперь я могу писать в приложении iPhone и читать в Watch.

Я понятия не имею, почему первая группа приложений не работала, так как я выполнял те же самые шаги при создании второго. Возможно, есть что-то нехорошее с этой бета-версией 6.2 версии Xcode

+0

Я нашел добавление группы приложений в первый раз невероятно громоздкой и недокументированной. Вы должны представить отчет об ошибке, я был бы рад повторить его – phillfarrugia

Смежные вопросы