0

我正在尝试将 TodayExtension 添加到我现有的应用程序中,并且我希望该应用程序和扩展程序将通过 NSUserDefaults 共享数据。根据本教程http://www.glimsoft.com/06/28/ios-8-today-extension-tutorial/ 我确实喜欢它说:

  • 使用 Today 扩展创建新目标
  • 在 Extension 和 App 中添加新的 App-Group
  • 将代码添加到应用程序
  • 将代码添加到扩展程序

应用程序代码

func updateExtensionData() {
    let key = "identityCode"
    let valueForStore:Float = 2.0
    let extensiontDefaults = NSUserDefaults(suiteName: "group.company.mineSharedDefaults")
    extensiontDefaults?.setFloat(valueForStore, forKey: key)
    let results = extensiontDefaults?.synchronize()
    let checkCode = extensiontDefaults?.objectForKey(key)
    print("code for save \(valueForStore) synchronize result \(results) readed code \(checkCode!)")
}

扩展代码

private func updateData() {
    let key = "identityCode"
    let extensionDefaults = NSUserDefaults(suiteName: "group.company.mineSharedDefaults")
    let checkCode = extensionDefaults?.floatForKey(key)
    print("synchronize result \(resut) readed code \(checkCode!)")
}

问题

我的问题是扩展名总是读取 0 而不是 2。显然我遗漏了一些东西。在 AppGroup 和 NSUserDefaults 的情况下,iOS8 和 9 之间有一些主要区别吗?我知道应用程序之间只有watchOS2。

为了更清楚,这是来自 App 和 Extension NSUserDefaults 的键

应用程序密钥

苹果键盘

苹果键盘扩展

添加表情符号键盘处理

苹果语言

苹果密码键盘

首选语言

苹果语言环境

NSInterfaceStyle

MSVLoggingMasterSwitchEnabledKey

NS语言

AppleiTunesStoreItemKinds

身份代码

AppleLanguagesDidMigrate

PKEnable斯德哥尔摩设置

扩展键

苹果键盘

苹果键盘扩展

添加表情符号键盘处理

苹果语言

苹果密码键盘

首选语言

苹果语言环境

NSInterfaceStyle

MSVLoggingMasterSwitchEnabledKey

NS语言

AppleiTunesStoreItemKinds

AppleLanguagesDidMigrate

PKEnable斯德哥尔摩设置

很明显,密钥identityCode根本没有出现在扩展中。

4

2 回答 2

0

好的,我不确定有什么帮助,但我做了两件事:

  • 重命名当前 AppGroup 标识符并使​​用名称group.my.entire.bundle.id.of.my.app.sharedData而不是创建新的group.appname.sharedData
  • 删除并创建新的 AppGroup 标识符

我可以使用“identityCode”作为键。

于 2015-09-23T14:28:37.010 回答
0

C可能有几件事!第一的; 您是否允许容器应用程序和扩展在“功能”下共享钥匙串,是否将钥匙串组设置为同一组?

我建议使用这个:https ://github.com/kefbytes/KeychainWrapper 下载它,非常简单,只需将 swiftfile 添加到您的项目中即可

允许在 cabailities 下共享钥匙串,像这样设置您的 serviceName 和 accesssgroup

KeychainWrapper.serviceName = "在这里给它一个名字"

(服务名称是它工作所必需的)

KeychainWrapper.accessGroup = "在这里写下你的访问组名称"

(访问组是可选的,因为您在功能下设置它)

将值保存到这样的键

KeychainWrapper.setString("2", forKey: "identityCode"

并检索

KeychainWrapper.stringForKey("identityCode")

于 2015-09-24T09:36:46.263 回答