如何在IOS中使用swift而不使用Coredata的两个扩展之间共享变量值



假设我在一个项目中有两个扩展。我想在一个扩展中设置一个变量,并从另一个扩展中读取该变量的更新值。我不想使用Coredata

目前,我正在使用Common cocoa touch框架,并在两个扩展中导入该框架。我已经为公共框架中定义的类中的一个变量定义了getter和setter。但是,一个扩展更改的值不会显示给另一个扩展。

有任何想法,为什么不更新或其他方法请。由于

通常使用NSUserDefaults.standardUserDefaults()在单个应用中存储数据。

在本例中,您希望使用App Groups来共享数据。

共享NSUserDefaults数据

使用以下步骤在设置中添加应用组:

  1. 在项目导航器中单击*。xcodeproj文件(应该在顶部)。
  2. 在项目导航器的右侧查找项目和目标。在目标下面点击你的主要目标(应该是目标下面的第一件事)。
  3. 在顶部,点击Capabilities选项卡。
  4. 在App Groups中点击右侧的开关打开App Groups。
  5. 点击+按钮,添加一个名为group.com.company.myApp的应用组。
  6. 转到你的其他应用程序的相同位置,这个组现在应该可以选择。为每个使用此共享数据的应用程序打开此组。

注意:如果你进入苹果开发者门户(苹果网站,显示你所有的证书,标识符,设备和配置文件),并进入标识符>应用程序组,你应该看到这个新的应用程序组

存储数据:

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

最新更新