应用和扩展程序之间的共享UserDefaults无法正常工作 [英] Shared UserDefaults between app and extension not working correctly

查看:537
本文介绍了应用和扩展程序之间的共享UserDefaults无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我一直在四处寻找正确设置共享UserDefaults的所有步骤,但我应该遗漏一些东西。



我已经激活了App Groups功能我的应用和我的扩展。两者都使用相同的套件名称(group.TestSharedPreferences),我这样写:

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

On viewDidLoad

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

并阅读:

  Preferences.shared.integer (forKey:INT)//在容器应用程序中返回1 
Preferences.shared.integer(forKey:INT)//在今日扩展中返回0

在设置INT后立即使用 synchronize() ,扩展中检索的值不是容器App中保存的值。关于我可能遗失的任何想法?谢谢!

解决方案

我建议一步一步地在这里挖掘。



首先,确保主应用程序和小部件扩展程序都启用了应用程序组功能并使用相同并激活(必须设置复选标记)应用程序组名称:



主要应用



然后直接进行简单测试设置/获取访问权限。在主应用程序的 AppDelegate.didFinishLaunchingWithOptions 方法中(根据需要更改应用程序组名称和密钥):

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

在Today Widget Extension的ViewController中:

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

如果这样可行,问题必定是您的偏好设置单身人士相关。


So I've been looking around and following all the steps to setup shared UserDefaults correctly but I should be missing something.

I have App Groups capability activated on both my app and my extension. Both use the same suite name ("group.TestSharedPreferences") and I write this way:

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

On viewDidLoad:

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

And to read:

Preferences.shared.integer(forKey: "INT") // Returns 1 in Container App
Preferences.shared.integer(forKey: "INT") // Returns 0 in Today Extension

Even using synchronize() just after setting "INT", the value retrieved in the extension is not the one saved in the container App. Any ideas on what might I be missing? Thank you!

解决方案

I would recommend to dig down step by step here.

First, make sure that both the main app and the widget extension have app group capability enabled and use the same and activated (the checkmark must be set) app group name:

Main App:

Today Widget Extension:

Then make a simple test with direct set/get access. In your main app's AppDelegate.didFinishLaunchingWithOptions method (change the app group name and the keys to your needs):

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

In your Today Widget Extension's ViewController:

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

If this works, the problem must be related in your Preferences singleton.

这篇关于应用和扩展程序之间的共享UserDefaults无法正常工作的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆