【问题标题】:How to auto clear NSUserDefault values in swift? [duplicate]如何快速自动清除 NSUserDefault 值? [复制]
【发布时间】:2015-03-06 03:28:39
【问题描述】:

如何快速自动清除nsuserdefault 值?我已经尝试过了,但它对我不起作用......

[[NSUserDefaults standardUserDefaults] setPersistentDomain:[NSDictionary dictionary] forName:[[NSBundle mainBundle] bundleIdentifier]];

【问题讨论】:

  • 那么,如果你使用的是 Swift,为什么你的代码是 Objective-C 的呢?嗯?

标签: swift swift2 nsuserdefaults


【解决方案1】:

objective-c 代码的快速对应物是这样的

 let appDomain = NSBundle.mainBundle().bundleIdentifier!

 NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)

Swift 3.0 及更高版本

let appDomain = Bundle.main.bundleIdentifier!
UserDefaults.standard.removePersistentDomain(forName: appDomain)

【讨论】:

    【解决方案2】:

    Swift 3.0 解决方案

    let appDomain = Bundle.main.bundleIdentifier!
    UserDefaults.standard.removePersistentDomain(forName: appDomain) 
    

    【讨论】:

      【解决方案3】:

      检查已经存储了多少键

      print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)
      

      只添加另一个键

      NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey1")
      NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey2")
      

      再次检查已经存储了多少密钥 (+2)

      print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)
      

      现在创建一个循环来删除键的对象

      for key in NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys {
          NSUserDefaults.standardUserDefaults().removeObjectForKey(key.description)
      }
      

      再次检查你有多少钥匙

      print(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys.array.count)
      

      更新:Xcode 7.2.1 • Swift 2.1.1(注意 NSUserDefaults 不再适用于 Playground,因此需要在实际项目中进行测试)

      print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)
      
      NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey1")
      NSUserDefaults.standardUserDefaults().setBool(true, forKey: "justAnotherKey2")
      
      print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)
      
      for key in Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys) {
          NSUserDefaults.standardUserDefaults().removeObjectForKey(key)
      }
      
      print(Array(NSUserDefaults.standardUserDefaults().dictionaryRepresentation().keys).count)
      

      【讨论】:

      • .array 不需要
      • @LeonardoSavioDabus,这太过分了。你可以像objective-c一样简单地在一行中做到这一点。检查我的答案
      【解决方案4】:
      defaults.setObject(nil, forKey: "userEmail")
      

      这样做,你把 nil,所以你清除

      【讨论】:

      • 这确实有效,但是有一种方法叫做 removeObjectForKey
      • @LeoDabus,你说得对,但 removeObjectForKey 并不适用于所有人,比如在运行时替换或删除 UserAgent。
      【解决方案5】:

      没有“自动清除”。只需获取所有现有的 NSUserDefaults 键并将它们全部设置为 nil。

      要获取所有密钥,请获取 NSUserDefaults dictionaryRepresentation 并获取其 keys(在 Objective-C 中为 allKeys)。

      【讨论】:

        猜你喜欢
        • 2018-01-24
        • 2014-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-12-21
        相关资源
        最近更新 更多