2016-10-16 1 views
10

共有されたUserDefaultsを正しくセットアップするためのすべての手順を見てきましたが、何か不足しているはずです。共有されたUserDefaultsがアプリと拡張子の間で正しく動作しない

私は自分のアプリケーションと拡張機能の両方でアクティブ化されたアプリケーショングループ機能を持っています。どちらも同じスイート名("group.TestSharedPreferences")を使用して、私はこのように書きます。

viewDidLoadオン
struct Preferences { 
    static let shared = UserDefaults(suiteName: "group.TestSharedPreferences")! 
} 

Preferences.shared.set(1, forKey: "INT") 

、読み:

だけでも "INT"を設定した後 synchronize()を使用して
Preferences.shared.integer(forKey: "INT") // Returns 1 in Container App 
Preferences.shared.integer(forKey: "INT") // Returns 0 in Today Extension 

拡張機能で取得された値はコンテナAppに保存された値ではありません。私は何が欠けているかもしれないかについての任意のアイデア?ありがとうございました!

+0

両方のターゲットのエンタイトルメントファイルにそのアプリケーショングループが含まれていますか? –

+0

このキーの値が 'nil'であれば' 0'が返されると思います。したがって、これは、今日の拡張コードで 'Preferences.shared'を正しく定義していないか、今日拡張コードが呼び出されているかのいずれかの印のようです。これまでは値を設定する機会があります。 – matt

+0

[アプリケーショングループとの間でデータを通信して永続化する]の可能な複製(http://stackoverflow.com/questions/24015506/communicating-and-persisting-data-between-apps-with-app-groups) – Maetschl

答えて

9

ここでは一歩一歩下方に掘り下げることをおすすめします。

主なアプリケーション: Main App

まず、メインのアプリとウィジェットの拡張子の両方が、アプリのグループ機能が有効になっていると同じ、活性化(チェックマークを設定しなければならない)アプリのグループ名を使用していることを確認してください

今日ウィジェット拡張子:

Today Widget Extension

次に、直接設定/取得アクセスを使用して簡単なテストを行います。あなたの今日のウィジェット拡張ののViewControllerで

if let userDefaults = UserDefaults(suiteName: "group.de.zisoft.GPS-Track") { 
    userDefaults.set("test 1" as AnyObject, forKey: "key1") 
    userDefaults.set("test 2" as AnyObject, forKey: "key2") 
    userDefaults.synchronize() 
} 

:あなたのメインアプリのAppDelegate.didFinishLaunchingWithOptions方法(あなたのニーズにアプリのグループ名とキーを変更)で、これが動作する場合

if let userDefaults = UserDefaults(suiteName: "group.de.zisoft.GPS-Track") { 
    let value1 = userDefaults.string(forKey: "key1") 
    let value2 = userDefaults.string(forKey: "key2") 
    ... 
} 

、問題が関連していなければなりませんあなたのPreferencesシングルトンで

+0

これは動作しているようですが、この警告が表示され始めました.CFPrefsPlistSourceの値を読み取ることができませんでした<....>。だから私はgroup.XXXXのデフォルト名を変更してしまい、何らかの理由で正しく動作しています。とにかくありがとう! – iDeC

+0

私は同じ問題を抱えていました。新しいsharedContainerを作成することで@iDeCのように解決しました。そしてすべてがうまくいった。 – sambro

関連する問題