2016-06-30 7 views
0

助けてください。 ホストアプリケーションからウィジェットにデータを転送する方法は?私は、アプリケーションとウィジェットのフレームワークから同じ機能を使用します。アプリケーションはデータを受け取り、ウィジェットは空の配列を返します。ホストアプリケーションから今日のウィジェットへのSwiftデータ

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 [] 

}

答えて

0

あなたが含むアプリや拡張機能の間でデータを共有するためにUserDefaults.standard()を使用することはできません。 Appleから

:アプリの拡張バンドルは、そのは アプリのバンドル、実行中のアプリの拡張子を含むアプリを含む内にネストされていても

は互いのコンテナへ 直接アクセス全くありません。

ので....

含むアプリとそれに含まれるアプリの拡張のために アプリのグループを有効にするには、Xcodeのか、開発者向けポータルを使用し、データ共有を有効にするには。

1

私の英語のレベルはお詫び申し上げます。

APPHOSTとウィジェットの間でデータを共有するには、静的クラスの例のために、このようにそれをあなたのuserDefaultデータを保存する必要があります。

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 
    } 
} 

して使用する:

let ledcontrollerdata = UserDefaultDataHelper.loadKeyToGroupApp("ledControllers") 

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

だけあなたを救いますこのようなデータでは、複数のアプリ、ウィジェットなどから同じデータを共有する必要がありますが、これらがバンドルIDグループのある「アプリグループ」にある場合に限ります。 group.com.testにこのBundle IDグループを使用し、両方のプロジェクトがそれぞれの資格を持ち、Capabilities - > AppGroupsでターゲットを構成し、AppGroupDomainを選択する必要があります。

+0

はい、この方法で私のために働きましたが、開発者アカウントのApp Groupsを設定するのはかなり必要でした。 –

関連する問題