我正在尝试将TodayExtension添加到我现有的应用中,我希望该应用和扩展程序将通过NSUserDefaults共享数据。 根据本教程http://www.glimsoft.com/06/28/ios-8-today-extension-tutorial/ 我确实喜欢它说:
应用代码
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之间有一些主要的区别?我知道app之间只有watchOS2。
为了更清楚,这是来自App和Extension NSUserDefaults的密钥
应用密钥
AppleKeyboards
AppleKeyboardsExpanded
AddingEmojiKeybordHandled
AppleLanguages
ApplePasscodeKeyboards
PreferredLanguages
AppleLocale
NSInterfaceStyle
MSVLoggingMasterSwitchEnabledKey
NSLanguages
AppleITunesStoreItemKinds
identityCode
AppleLanguagesDidMigrate
PKEnableStockholmSettings
扩展密钥
AppleKeyboards
AppleKeyboardsExpanded
AddingEmojiKeybordHandled
AppleLanguages
ApplePasscodeKeyboards
PreferredLanguages
AppleLocale
NSInterfaceStyle
MSVLoggingMasterSwitchEnabledKey
NSLanguages
AppleITunesStoreItemKinds
AppleLanguagesDidMigrate
PKEnableStockholmSettings
很明显,密钥identityCode
根本没有出现在扩展名中。
答案 0 :(得分:0)
好的,我不确定有什么帮助,但我做了两件事:
group.my.entire.bundle.id.of.my.app.sharedData
的新标识符,而不是group.appname.sharedData
我可以使用" identityCode"作为关键。
答案 1 :(得分:0)
CThere可能有几件事! 第一;你是否允许容器应用程序和扩展程序的“功能”下的钥匙串共享,你是否将钥匙串组设置为同一组?
我建议使用此:https://github.com/kefbytes/KeychainWrapper 下载它,非常简单,只需将swift文件添加到项目中
允许在cabailities下共享钥匙串, 像这样设置你的serviceName和accesgroup
KeychainWrapper.serviceName =“在这里给它起个名字”
(servicename是必要的,它可以工作)
KeychainWrapper.accessGroup =“在此处写下您的访问组名称”
(accesgroup是可选的,因为你在Capabilities下设置它)
将值保存到像这样的键
KeychainWrapper.setString(“2”,forKey:“identityCode”
并使用
进行检索KeychainWrapper.stringForKey( “identityCode”)