在主应用程序和今日小部件 macOS 之间共享数据
Share data between main app and today widget macOS
我正在尝试在我的主要 macOS 应用程序和我创建的扩展程序之间共享数据。
我看到我必须使用 "App Groups" 并与 "UserDefault(suiteName: "name")"
共享数据
问题:在主应用上打开应用组并添加名称后,我在扩展上打开应用组,但列表是空的,我没有看到我刚刚创建的组?
有什么想法吗?
顺便说一句:团队资料在应用程序和扩展程序上是相同的。我尝试删除临时文件、清理项目、恢复 Xcode 和计算机。
编辑 1:在 iOS 项目中检测到应用组....
编辑 2:我尝试使用 Xcode 9 但同样的问题。
编辑 3:在证书、标识符和配置文件苹果网站上,您没有适用于 macOS 的类别 "App Groups",是否已弃用??
编辑 4:如果我手动添加两个添加组名称,那么我在输出中遇到错误:。
[用户默认值] 无法读取 CFPrefsPlistSource <0x6000000e4200> 中的值(域:726328455Z.test,用户:kCFPreferencesAnyUser,ByHost:是,容器:(null)):仅允许系统容器使用 kCFPreferencesAnyUser 与容器,分离来自 cfprefsd。
编辑 5:看起来可行,使用此代码已成功保存数据
UserDefaults(suiteName: "7263xxx55Z.test")!.set(selectedRow, forKey: "selectedRow")
UserDefaults(suiteName: "7263xxx55Z.test")!.synchronize()
然后用这段代码获取,我得到了之前的错误,但我只是忽略了它
let selectedRow = UserDefaults(suiteName: "726xxx55Z.test")!.integer(forKey: "selectedRow")
要在 macOS 项目的 app/app 扩展之间共享数据:
1/ 在您的主项目目标中,select 功能并启用 "App Groups".
2/ 点击“+”并添加一个新的应用组名称,它必须以您的团队 ID 开头(例如 643J438K.name.app)
3/ 为您的扩展应用程序目标重复 1/ 和 2/,确保添加相同的名称
4/ 要保存和获取数据,请使用:
// Store data
UserDefaults(suiteName: "643J438K.name.app")!.set(yourVariable, forKey: "yourKey")
UserDefaults(suiteName: "643J438K.name.app")!.synchronize()
// Fetch data (integer type here)
UserDefaults(suiteName: "643J438K.name.app")!.integer(forKey: "yourKey")
5/ 您可以通过打开此文件来检查您的数据是否正确保存:
/Users/UserName/Library/Group Containers/643J438K.name.app/Preferences/643J438K.name.app.plist
我正在尝试在我的主要 macOS 应用程序和我创建的扩展程序之间共享数据。
我看到我必须使用 "App Groups" 并与 "UserDefault(suiteName: "name")"
问题:在主应用上打开应用组并添加名称后,我在扩展上打开应用组,但列表是空的,我没有看到我刚刚创建的组?
有什么想法吗?
顺便说一句:团队资料在应用程序和扩展程序上是相同的。我尝试删除临时文件、清理项目、恢复 Xcode 和计算机。
编辑 1:在 iOS 项目中检测到应用组....
编辑 2:我尝试使用 Xcode 9 但同样的问题。
编辑 3:在证书、标识符和配置文件苹果网站上,您没有适用于 macOS 的类别 "App Groups",是否已弃用??
编辑 4:如果我手动添加两个添加组名称,那么我在输出中遇到错误:。
[用户默认值] 无法读取 CFPrefsPlistSource <0x6000000e4200> 中的值(域:726328455Z.test,用户:kCFPreferencesAnyUser,ByHost:是,容器:(null)):仅允许系统容器使用 kCFPreferencesAnyUser 与容器,分离来自 cfprefsd。
编辑 5:看起来可行,使用此代码已成功保存数据
UserDefaults(suiteName: "7263xxx55Z.test")!.set(selectedRow, forKey: "selectedRow")
UserDefaults(suiteName: "7263xxx55Z.test")!.synchronize()
然后用这段代码获取,我得到了之前的错误,但我只是忽略了它
let selectedRow = UserDefaults(suiteName: "726xxx55Z.test")!.integer(forKey: "selectedRow")
要在 macOS 项目的 app/app 扩展之间共享数据:
1/ 在您的主项目目标中,select 功能并启用 "App Groups".
2/ 点击“+”并添加一个新的应用组名称,它必须以您的团队 ID 开头(例如 643J438K.name.app)
3/ 为您的扩展应用程序目标重复 1/ 和 2/,确保添加相同的名称
4/ 要保存和获取数据,请使用:
// Store data
UserDefaults(suiteName: "643J438K.name.app")!.set(yourVariable, forKey: "yourKey")
UserDefaults(suiteName: "643J438K.name.app")!.synchronize()
// Fetch data (integer type here)
UserDefaults(suiteName: "643J438K.name.app")!.integer(forKey: "yourKey")
5/ 您可以通过打开此文件来检查您的数据是否正确保存:
/Users/UserName/Library/Group Containers/643J438K.name.app/Preferences/643J438K.name.app.plist