2016-06-30 20 views
0

bitte helfen. Wie übertragen Sie Daten von der Host-Anwendung in ein Widget? Ich benutze die gleiche Funktion von Framework in der Anwendung und Widget. Die Anwendung empfängt Daten und das Widget gibt ein leeres Array zurück.Swift Daten zum heutigen Widget aus der Host-Anwendung

public func readLED() -> [LEDController] { 
let defaults = UserDefaults.standard() 

if let saved = defaults.object(forKey: "ledControllers") as? NSData { 
    return (NSKeyedUnarchiver.unarchiveObject(with: saved as Data) as! [LEDController]) 
} 
return [] 

}

Antwort

0

Sie werden nicht in der Lage sein UserDefaults.standard() zu verwenden, um Daten zwischen Ihrem enthält, App und Erweiterung zu teilen.

Von Apple:

Auch wenn eine App-Erweiterung Bündel verschachtelt ist innerhalb seiner App Bundle, die laufende App-Erweiterung enthält, und enthält App haben keine direkten Zugang zu den jeweiligen Behältern des anderen.

So ....

Um die Datenfreigabe zu aktivieren, verwenden Xcode oder das Developer Portal App Gruppen für die enthält App und die darin enthaltenen App-Erweiterungen zu ermöglichen.

1

Ich entschuldige mich für mein Niveau der Englisch.

Um Daten zwischen apphost und Widget zu teilen, sollten Sie Ihre userDefault Daten es so, zum Beispiel in einer statischen Klasse sparen:

class UserDefaultDataHelper: NSObject { 
    static func saveKeyToGroupApp(_ value: AnyObject?, withKey key:String) -> Void { 
     UserDefaults(suiteName: "group.com.test")!.set(value, forKey: key) 
     UserDefaults(suiteName: "group.com.test")!.synchronize() 
    } 

    //and to read values 

    static func loadKeyToGroupApp(_ key:String) -> AnyObject? { 
     if let loadedValue = UserDefaults(suiteName: "group.com.test")?.object(forKey: key){ 
      return loadedValue as AnyObject? 
     } 
     return nil 
    } 
} 

und zu verwenden:

let ledcontrollerdata = UserDefaultDataHelper.loadKeyToGroupApp("ledControllers") 

UserDefaultDataHelper.saveKey(yourData as AnyObject?, withKey: "ledControllers") 

Nur speichern Sie Ihre Daten wie diese sollten Sie die gleichen Daten von mehreren Apps, Widget, etc. teilen, ABER nur wenn diese in einer "App-Gruppe" mit einer Bundle-ID-Gruppe sind. Sie sollten diese Bündel-ID-Gruppe in group.com.test verwenden und beide Projekte sollten ihre jeweiligen Berechtigungen haben und beide Ziele in Capabilities -> AppGroups konfigurieren, wählen Sie Ihre AppGroupDomain.

+0

Ja Kumpel, es funktionierte für mich auf diese Weise, aber das Einrichten der App-Gruppen in den Developer-Konten in so ziemlich benötigt. –