删除Logout上的所有变量值

时间:2015-12-11 05:59:50

标签: ios swift

当我从应用程序注销时,如何从一个地方删除所有变量值?与NSUserDefaults类似,我们使用以下代码:

/*===CLEAR ALL NSUSERDEFAULTS====*/
let appDomain = NSBundle.mainBundle().bundleIdentifier!   
NSUserDefaults.standardUserDefaults().removePersistentDomainForName(appDomain)

2 个答案:

答案 0 :(得分:2)

从设计点开始,创建一个处理所有设置的类 - 例如我在我的项目中有XUPreferences并将所有设置存储在一个地方(通常是一个具有各种变量的类,将其值委托给NSUserDefaults)。除了在命名空间周围没有各种默认键,你可以很好地概述应用程序设置的所有内容。

在这个课程中,您可以使用func clearAllPreferences()方法,可以(各种选项):

  • 您可以尝试使用resetStandardUserDefaults()
  • 上的NSUserDefaults类方法
  • 枚举您拥有的所有默认密钥,并在removeObjectForKey:
  • 上调用NSUserDefaults方法
  • 如果您为密钥添加前缀(例如,我使用XU为我的所有默认密钥添加前缀),您可以通过查看NSUserDefaults.standardUserDefaults().dictionaryRepresentation()中的密钥并将其与前缀匹配来自动执行此操作。
  • 使用套件 - 查看指定的初始化程序 - 传递额外的套件名称,然后您可以在func removeSuiteNamed()上调用NSUserDefaults - 这可能是最好的方法,因为它可以让您区分会话 - 相关和非会话相关的设置,只擦除与会话相关的设置。

编辑:

/// Key in defaults for myOption
private let XUMyOptionDefaultsKey = "XUMyOption"

public class XUPreferences {

    /// Shared instance
    public static var sharedPreferences = XUPreferences()

    /// Your option, purely based on the values in NSUserDefaults.
    public var myOption: Bool {
        get {
            return NSUserDefaults.standardUserDefaults().boolForKey(XUMyOptionDefaultsKey)
        }
        set {
            NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: XUMyOptionDefaultsKey)
        }
    }

    /// Clears preferences.
    public func clearPreferences1() {
        let defaults = NSUserDefaults.standardUserDefaults()
        for (key, _) in defaults.dictionaryRepresentation() {
            // All keys are prefixed with XU
            if key.hasPrefix("XU") {
                defaults.removeObjectForKey(key)
            }
        }
    }

    /// Clears preferences another way
    public func clearPreferences2() {
        let defaults = NSUserDefaults.standardUserDefaults()

        for key in [ XUMyOptionDefaultsKey /**, all keys for your options go here. */ ] {
            defaults.removeObjectForKey(key)
        }
    }

}

// Usage:

// x is now false (most likely)
var x = XUPreferences.sharedPreferences.myOption

// Change the option to true
XUPreferences.sharedPreferences.myOption = true

XUPreferences.sharedPreferences.clearPreferences1()

// False again, since we've cleared the preferences.
x = XUPreferences.sharedPreferences.myOption

答案 1 :(得分:1)

创建一个由登录用户的所有属性组成的类(要在注销时清除)

最好的方法是使用dispatch创建一次共享实例,而不是需要重置属性时重置调度 onceToken

这是目标C中的示例代码

static dispatch_once_t onceToken;


+ (id)sharedInstance
{

    dispatch_once(&onceToken, ^{
        instance = [[self alloc] init];
    });

    return instance;
}

+ (void)clearMemberInfo
{
    //  [[NSNotificationCenter defaultCenter] removeObserver:self];
    //instance = nil;
    onceToken = 0;
}