gpt4 book ai didi

ios - 在 iOS 8 共享扩展和主应用程序之间共享数据

转载 作者:行者123 更新时间:2023-11-28 07:37:47 26 4
gpt4 key购买 nike

最近,我一直在制作一个简单的 iOS 8 共享扩展,以了解该系统的工作原理。正如 Apple 在其 App Extension Programming Guide 中所述:

By default, your containing app and its extensions have no direct access to each other’s containers.

这意味着扩展程序和包含的应用程序不共享数据。但在同一页面中,Apple 提出了一个解决方案:

If you want your containing app and its extensions to be able to share data, use Xcode or the Developer portal to enable app groups for the app and its extensions. Next, register the app group in the portal and specify the app group to use in the containing app.

然后就可以使用 NSUserDefaults 在包含的应用程序和扩展程序之间共享数据。这正是我想做的。但由于某种原因,它不起作用。

在同一页面中,Apple 建议使用标准默认值:

var defaults = NSUserDefaults.standardUserDefaults()

在 WWDC 演示文稿 (217) 中,他们提出了一个通用包:

var defaults = NSUserDefaults(suiteName: kDefaultsPackage)

此外,我还为包含的应用程序目标和扩展目标启用了应用程序组,具有相同的应用程序组名称: XCode Target capabilities, App Groups

但是所有这些设置都是徒劳的。我无法从扩展程序中检索我存储在包含应用程序中的数据。这就像两个目标正在使用完全不同的 NSUserDefaults 存储。

所以,

  1. 这个方法有解决方案吗?
  2. 如何在包含应用程序和共享扩展程序之间共享简单数据?数据只是 API 的用户凭据。

最佳答案

你应该像这样使用 NSUserDefaults:

保存数据:

对象

NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.yougroup"];
[shared setObject:object forKey:@"yourkey"];
[shared synchronize];

swift

let defaults = UserDefaults(suiteName: "group.yourgroup")
defaults?.set(5.9, forKey: "yourKey")

读取数据:

对象

NSUserDefaults *shared = [[NSUserDefaults alloc] initWithSuiteName:@"group.yougroup"];
id value = [shared valueForKey:@"yourkey"];
NSLog(@"%@",value);

swift

let defaults = UserDefaults(suiteName: "group.yourgroup")
let x = defaults?.double(forKey: "yourKey")
print(x)

这会很好用!

关于ios - 在 iOS 8 共享扩展和主应用程序之间共享数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52974299/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com