0

TodayExtension を既存のアプリに追加しようとしていますが、アプリと拡張機能が NSUserDefaults を介してデータを共有するようにしたいと考えています。このチュートリアルhttp://www.glimsoft.com/06/28/ios-8-today-extension-tutorial/によると、 私はそれが好きでした:

  • Today 拡張機能を使用して新しいターゲットを作成する
  • 拡張機能とアプリに新しいアプリ グループを追加します
  • コードをアプリに追加
  • 拡張機能にコードを追加

アプリコード

func updateExtensionData() {
    let key = "identityCode"
    let valueForStore:Float = 2.0
    let extensiontDefaults = NSUserDefaults(suiteName: "group.company.mineSharedDefaults")
    extensiontDefaults?.setFloat(valueForStore, forKey: key)
    let results = extensiontDefaults?.synchronize()
    let checkCode = extensiontDefaults?.objectForKey(key)
    print("code for save \(valueForStore) synchronize result \(results) readed code \(checkCode!)")
}

延長コード

private func updateData() {
    let key = "identityCode"
    let extensionDefaults = NSUserDefaults(suiteName: "group.company.mineSharedDefaults")
    let checkCode = extensionDefaults?.floatForKey(key)
    print("synchronize result \(resut) readed code \(checkCode!)")
}

問題

私の問題は、拡張機能が常に 2 ではなく 0 を読み取ることです。明らかに何かが欠けています。AppGroup と NSUserDefaults の場合、iOS8 と 9 の間に大きな違いはありますか? アプリの間にwatchOS2があることは知っています。

より明確にするために、これは App and Extension NSUserDefaults のキーです

アプリキー

Appleキーボード

AppleKeyboardsExpanded

EmojiKeybordHandled の追加

AppleLanguages

Appleパスコードキーボード

優先言語

AppleLocale

NSInterfaceStyle

MSVLoggingMasterSwitchEnabledKey

NS言語

AppleITunesStoreItemKinds

IDコード

AppleLanguagesDidMigrate

PKEnableStockholmSettings

拡張キー

Appleキーボード

AppleKeyboardsExpanded

EmojiKeybordHandled の追加

AppleLanguages

Appleパスコードキーボード

優先言語

AppleLocale

NSInterfaceStyle

MSVLoggingMasterSwitchEnabledKey

NS言語

AppleITunesStoreItemKinds

AppleLanguagesDidMigrate

PKEnableStockholmSettings

キーidentityCodeが拡張子にまったく表示されていないことは明らかです。

4

2 に答える 2

0

C複数の可能性があります。最初; コンテナー アプリと拡張機能の両方の [機能] でキーチェーンの共有を許可し、キーチェーン グループを同じグループに設定しましたか?

これを使用することをお勧めします: https://github.com/kefbytes/KeychainWrapper ダウンロードしてください。非常に簡単です。swiftfile をプロジェクトに追加するだけです。

キャバリティの下でキーチェーンの共有を許可し、serviceName と accesssgroup を次のように設定します

KeychainWrapper.serviceName = "ここで名前を付けてください"

(サービス名は動作するために必要です)

KeychainWrapper.accessGroup = "ここにアクセスグループ名を記入してください"

(accessgroup はオプションです。これは Capabilities で設定しているためです)

このようなキーに値を保存します

KeychainWrapper.setString("2", forKey: "identityCode"

で取得します

KeychainWrapper.stringForKey("identityCode")

于 2015-09-24T09:36:46.263 に答える