假设我在一个项目中有两个扩展。我想在一个扩展中设置一个变量,并从另一个扩展中读取该变量的更新值。我不想使用Coredata
目前,我正在使用Common cocoa touch框架,并在两个扩展中导入该框架。我已经为公共框架中定义的类中的一个变量定义了getter和setter。但是,一个扩展更改的值不会显示给另一个扩展。
有任何想法,为什么不更新或其他方法请。由于
通常使用NSUserDefaults.standardUserDefaults()在单个应用中存储数据。
在本例中,您希望使用App Groups来共享数据。
共享NSUserDefaults数据
使用以下步骤在设置中添加应用组:
- 在项目导航器中单击*。xcodeproj文件(应该在顶部)。
- 在项目导航器的右侧查找项目和目标。在目标下面点击你的主要目标(应该是目标下面的第一件事)。 在顶部,点击Capabilities选项卡。
- 在App Groups中点击右侧的开关打开App Groups。
- 点击+按钮,添加一个名为group.com.company.myApp的应用组。
- 转到你的其他应用程序的相同位置,这个组现在应该可以选择。为每个使用此共享数据的应用程序打开此组。
注意:如果你进入苹果开发者门户(苹果网站,显示你所有的证书,标识符,设备和配置文件),并进入标识符>应用程序组,你应该看到这个新的应用程序组
存储数据:
var userDefaults = NSUserDefaults(suiteName: "group.com.company.myApp")
userDefaults!.setObject("user12345", forKey: "userId")
userDefaults!.synchronize()
检索数据:
var userDefaults = NSUserDefaults(suiteName: "group.com.company.myApp")
if let testUserId = userDefaults?.objectForKey("userId") as? String {
print("User Id: (testUserId)")
}