简体   繁体   English

什么是使用NSUserDefaults.standardUserDefaults()。registerDefaults(Dictionary <String, AnyObject> )?

[英]what is effective approach to set default values using NSUserDefaults.standardUserDefaults().registerDefaults(Dictionary<String, AnyObject>)?

I have 4 user settings in the app which are independent of each other. 我在应用程序中有4个彼此独立的用户设置。 I want to check value for each setting using appropriate method of NSUserDefaults.standardUserDefaults() for each key and if any of the key is not found in user defaults then register the default predefined value. 我想使用NSUserDefaults.standardUserDefaults()适当方法为每个键检查每个设置的值,如果在用户默认值中未找到任何键,请注册默认的预定义值。

I do not want to call NSUserDefaults.standardUserDefaults.registerDefaults(Dictionary<String, AnyObject>) every time with app launch , so i am not registering defaults using this method in AppDelegate.Swift- didFinishLaunchingWithOptions with every app launch but i call a method in root view controller's viewDidLoad() which runs a custom logic to check each user settings. 我不想每次应用启动时都调用NSUserDefaults.standardUserDefaults.registerDefaults(Dictionary<String, AnyObject>) ,因此我不NSUserDefaults.standardUserDefaults.registerDefaults(Dictionary<String, AnyObject>)AppDelegate.Swift- didFinishLaunchingWithOptions使用此方法注册默认值。根视图控制器的viewDidLoad() ,它运行自定义逻辑来检查每个用户设置。 if all 4 settings already saved by user no call to registerDefaults() at all and if any one of settings not saved, call registerDefaults() . 如果用户已经保存了所有4个设置,则根本不调用registerDefaults() ,并且如果未保存任何设置,则调用registerDefaults()

Can anyone suggest is there any effective way of doing this or comment on the way i am trying to achieve it ? 谁能建议有任何有效的方法做到这一点,或者对我要实现的方法发表评论? Will Apple review team approve my logic? 苹果审查小组会批准我的逻辑吗?

I want to get rid of too many IF 's. 我想摆脱太多的IF Below is the logic i have written :- 以下是我写的逻辑:

    let userDefaults = NSUserDefaults.standardUserDefaults() as NSUserDefaults

    rate = AVSpeechUtteranceDefaultSpeechRate
    speech = true
    language = AVSpeechSynthesisVoice.currentLanguageCode()
    defaultLanguageName = NSLocale.currentLocale().displayNameForKey(NSLocaleIdentifier, value: language)
    bttnEffect = "Pop"

    var defaultSpeechSettings: Dictionary<String, AnyObject> = ["speechRate": rate, "speech": speech, "languageCode": language, "defLanguageLabel": defaultLanguageName, "gender": bttnEffect ]

    var isSpeechRateSettingLoaded = false
    var isSpeechSettingLoaded = false
    var isLangSettingLoaded = false
    var isBttnEffectSettingLoaded = false

    if let theRate: Float = userDefaults.valueForKey("speechRate") as? Float {
        rate = theRate
        defaultSpeechSettings.removeValueForKey("speechRate")
         isSpeechRateSettingLoaded = true
    }
    if let toggleVal: Bool = userDefaults.valueForKey("speech") as? Bool {
        speech = toggleVal
        defaultSpeechSettings.removeValueForKey("speech")
         isSpeechSettingLoaded = true
    }
    if let langCode = userDefaults.stringForKey("languageCode") {
        language = langCode
        defaultSpeechSettings.removeValueForKey("languageCode")
        defaultSpeechSettings.removeValueForKey("defLanguageLabel")
        isLangSettingLoaded = true
    }
    if let effectStyle = userDefaults.stringForKey("bttnEffect") {
        bttnEffect = effectStyle
        defaultSpeechSettings.removeValueForKey("bttnEffect")
        isBttnEffectSettingLoaded = true
    }
    if !(isSpeechRateSettingLoaded && isSpeechSettingLoaded && isLangSettingLoaded && isBttnEffectSettingLoaded) {
        NSUserDefaults.standardUserDefaults().registerDefaults(defaultSpeechSettings)
    }

Apple's review team doesn't care if you write sloppy code. 苹果的审查团队不在乎您是否编写草率的代码。

Note Ken's comment about how registerDefaults() only affects return values if no value is set for the given key. 注意Ken关于registerDefaults()仅在未给定键设置任何值的情况下如何影响返回值的评论。

Aside from that, however, extensions are a nice way to tame NSUserDefaults. 但是除此之外,扩展是驯服NSUserDefaults的好方法。

extension NSUserDefaults {
    private static let speechRateKey = "speechRate"
    var speechRate: Float {
        get {
            return valueForKey(NSUserDefaults.speechRateKey) as? Float ?? AVSpeechUtteranceDefaultSpeechRate
        }
        set {
            setObject(newValue, forKey: NSUserDefaults.speechRateKey)
            synchronize()
        }
    }
}

// somewhere else:
let speechRate = NSUserDefaults.standardUserDefaults().speechRate
doSomethingWith(speechRate)
NSUserDefaults.standardUserDefaults().speechRate = getNewSpeechRate()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用NSUserDefaults.standardUserDefaults()持久更新键和值 - Updating keys and values persisted using NSUserDefaults.standardUserDefaults() NSUserDefaults.StandardUserDefaults - 保存和检索字典 - NSUserDefaults.StandardUserDefaults - saving and retrieving a Dictionary Swift:不保存NSUserDefaults.standardUserDefaults值 - Swift: Is not saving NSUserDefaults.standardUserDefaults values 如何在NSUserDefaults.StandardUserDefaults中保存日期时间(日期)? - How to save a datetime (date) in NSUserDefaults.StandardUserDefaults? NSUserDefaults.standardUserDefaults()。dictionaryForKey()返回编译错误 - NSUserDefaults.standardUserDefaults().dictionaryForKey() returns compile error 如何摆脱NSUserDefaults.standardUserDefaults()打印输出周围的Optional()? - How to get rid of Optional() around printout of NSUserDefaults.standardUserDefaults()? NSUserDefaults.standardUserDefaults()。stringForKey(“ useremail”)值返回null - NSUserDefaults.standardUserDefaults().stringForKey(“useremail”) value returning null 我存储在NSUserDefaults.standardUserDefaults()中的数据何时更改? - When will the data i stored in NSUserDefaults.standardUserDefaults() change? 在 swift 版本 5.1.3 中 NSUserDefaults.standardUserDefaults().stringForKey 是如何使用的? - In swift version 5.1.3 How is NSUserDefaults.standardUserDefaults().stringForKey used? NSUserDefaults不保存StandardUserDefaults值 - NSUserDefaults not saving StandardUserDefaults values
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM