我在一个小的iPhone应用程序上工作,我使用NSUserDefaults作为我的数据持久性。它只需要跟踪一些东西,比如一些名字和一些数字,所以我想我最好保持简单。

我找到了这个页面作为参考,但我不认为它能回答我的问题。基本上,我希望能够检查一个值(或一个键)是否已经存在于NSUserDefaults,然后做相应的事情。

一些例子:应用程序启动,如果这是它第一次启动,它会输出一个警告说欢迎。要判断这是否是第一次打开,它会读取UserDefaults并进行检查。

例2:它说,“Hello [Name]”,其中Name是您已输入的内容。如果你已经打开了应用程序,没有名字,它应该说“Hello World”。我需要检查你是否已经输入了一个名字,并采取相应的行动。名称将存储在NSUserDefaults中。

有人帮忙吗?我真的很感激!


当前回答

Swift版本得到Bool?

NSUserDefaults.standardUserDefaults().objectForKey(DefaultsIsGiver) as? Bool

其他回答

我刚刚经历了这些,你们所有的回答都帮助我找到了一个好的解决方案。我拒绝走他建议的路线,只是因为我发现它很难阅读和理解。

我是这么做的。我在一个名为“_talkative”的变量中携带了BOOL值。

当我设置我的默认(NSUserDefaults)对象时,我将它设置为一个对象,因为我可以测试它是否为nil:

//converting BOOL to an object so we can check on nil
[defaults setObject:@(_talkative) forKey:@"talkative"];

然后当我去看它是否存在时,我用了:

if ([defaults objectForKey:@"talkative"]!=nil )
  {

然后我使用对象作为BOOL:

if ([defaults boolForKey:@"talkative"]) {
 ...

这对我来说似乎很管用。这对我来说更有视觉意义。

objectForKey:如果它不存在将返回nil。

如果该值不存在,objectForKey:方法将返回nil。下面是一个简单的IF / THEN测试,它会告诉你这个值是否为nil:

if([[NSUserDefaults standardUserDefaults] objectForKey:@"YOUR_KEY"] != nil) {
    ...
}

在Swift3中,我就是这样使用的

var hasAddedGeofencesAtleastOnce: Bool {
    get {
        return UserDefaults.standard.object(forKey: "hasAddedGeofencesAtleastOnce") != nil
    }
}

如果你要多次使用这个词,答案是很好的。

我希望它能帮助你:)

扩展UserDefaults一次,不复制粘贴这个解决方案:

extension UserDefaults {

    func hasValue(forKey key: String) -> Bool {
        return nil != object(forKey: key)
    }
}

// Example
UserDefaults.standard.hasValue(forKey: "username")