2015-05-04 45 views
12

我对iOS开发还是很新颖,但我不确定我是否会过度这样做。我目前正在开发一个应用程序,在打开时需要用户输入他们的登录凭证。这会变得乏味和令人沮丧,因为每次关闭应用程序并再次打开时,用户都必须登录。如果用户已登录,是否有一种简单的方法可以让程序记住?Swift:如何存储用户偏好?

我正在调查CoreData,但每个示例都涉及每次存储新对象并需要某种查询来获取信息。我真正需要的是一个bool isLoggedIn和一个存储用户ID的int。


编辑:

NSUserDefaults的正是我一直在寻找。

+1

你可能想看看'NSUserDefaults'和'keyChain'如果你需要存储密码。 – rmp

+0

'NSUserDefaults'和其他人一样完美。它们是为简单数据类型设置永久默认值的一种简单而简单的方法。 'CoreData'更复杂,用于存储更复杂的数据类型,但对于整数,布尔值,字符串等简单的事情来说,'NSUserDefaults'是完美的。 –

+0

我会使用一个简单的JSON文件,并使用GPG将其编码为一些疯狂的级别,钥匙串可以同步到iCloud,即不安全。我不信任苹果公司的密码,你为什么要这样做?借助钥匙扣,如果有人偷窃/盗用您的手机或笔记本电脑,您可能注定要失败。 –

回答

20

您可以使用NSUserDefaults保存信息并在应用下次启动时检索它。

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html

例如:

NSUserDefaults.standardUserDefaults().setObject("mynameisben", forKey: "username") 

let userName = NSUserDefaults.standardUserDefaults().stringForKey("username") 
+0

NSUserDefaults有一个特定的方法来检索一个字符串。它被称为NSUserDefaults()。stringForKey()。 BTW objectForKey()返回一个可选的,你应该使用,如果让它打开它或使用“??”无合并运算符返回默认值而不是零,如果没有存储值 –

+1

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/index.html#// apple_ref/occ/instm/NSUserDefaults/stringForKey: –

+1

'NSUserDefaults.standardUserDefaults()。synchronize()'有必要吗? – eliasRuizHz

7

使用NSUserDefaults

Let defaults = NSUserDefaults.standardUserDefaults() 
defaults.setObject("User", forKey: "userName") 

检查时,应用程序在AppDelegate.swift

didFinishLaunchingWithOptions 
启动用户名是否存在

如果用户名存在,跳过登录页面

要检查是否NSUserDefaults is nil

if (defaults.objectForKey(userName) != nil) { 
// Skip Login 
} 
else {// Show login 
} 
+0

你是如何“跳过登录”?这与将认证视图作为根控制器一样简单吗?然后在没有人进行身份验证的情况下在顶部显示登录(由NSUserDefaults确定)? – Neurax