ios - iOS 中的用户对象位置 (swift)

标签 ios swift nsuserdefaults

我有一个用户对象,我想为它存储当前登录的用户,以及允许用户执行某些操作的函数,例如注销、登录等。

按照这里的各种教程和大量帖子,我想出了一些到目前为止在通过登录页面登录时运行良好的代码。这是代码:

import Foundation
import UIKit

// define the protocol for using this class
protocol LoginProtocol {
    func didRecieveLoginResponse(status: Bool, message: String?)
}

class User : APIControllerProtocol {
  var delegate: LoginProtocol
  var username: String?
  var company: String?
  var auth_token: String?
  // more properties here

  // initiate the class, must have a delegate as per the protocol
  init(delegate: LoginProtocol, username: String?, school: String?) {
    self.delegate = delegate
    if(username != nil) {
        self.username = username
        self.company = company

    }
  }

  // login using the API
  func login(password: String) {
    print("Logging in as " + username! + " - " + company!)
    UIApplication.sharedApplication().networkActivityIndicatorVisible = true
    let api = APIController(delegate: self)
    var postFields = [String: String]()
    postFields["username"] = username
    postFields["password"] = password
    postFields["company"] = company
    api.request("login",postData: postFields)
  }

  // API results were received, log in the user if appropriate
  func didRecieveAPIResults(originalRequest: String,apiResponse: APIResponse) {
    dispatch_async(dispatch_get_main_queue(), {
        if(apiResponse.status == true) {
            self.auth_token = details["auth_token"]
            // more properties here
            self.save_to_user_defaults()
            self.delegate.didRecieveLoginResponse(true, message:nil )
        } else {
            self.delegate.didRecieveLoginResponse(false, message:apiResponse.message )
        }
        UIApplication.sharedApplication().networkActivityIndicatorVisible = false
    })
  }

  // save the properties to user defaults
  func save_to_user_defaults() {
    let defaults = NSUserDefaults.standardUserDefaults()
    defaults.setObject(self.username, forKey: "username")
    defaults.setObject(self.company, forKey: "company")
    defaults.setObject(self.auth_token, forKey: "auth_token")
    // more properties here
  }

  // load the properties from user defaults
  func load_from_user_defaults() {
    let defaults = NSUserDefaults.standardUserDefaults()
    self.username = defaults.objectForKey("username") as? String
    self.company = defaults.objectForKey("company") as? String
    self.auth_token = defaults.objectForKey("auth_token") as? String
    // more properties here
  }
}

我的下一步是通过 NSUserDefaults 登录用户——我的计划是通过这样的方式:

let user = User()
user.load_from_user_defaults()

不过我不太确定:

  • 我是否在正确的轨道上(这是我的第一个完整的 swift 应用程序)
  • 如果我是,将上面的两行代码(也许是应用程序代理?)放在哪里,这样当应用程序打开时,NSUserDefaults 中的用户(如果有)重新登录
  • 如何允许应用程序的其余部分访问用户(我希望能够在我的 View Controller 中引用用户数据,例如让 pointsLabel.text = users.points)

提前致谢!

最佳答案

希望我的回答能帮助改进您的应用:

  1. NSUserDefaults 不安全,可以在设备上和 Mac 上轻松打开和阅读。因此,用户默认值是存放首选项和配置信息的好地方,但不适合存放敏感信息,例如密码。检查link了解更多详情
  2. 是的,它应该在应用委托(delegate)中。加载用户数据并相应地呈现 View 。
  3. 您可以将用户数据传递给 View Controller ,也可以只从持久存储中读取。取决于您的要求。

关于ios - iOS 中的用户对象位置 (swift),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33936469/

相关文章:

ios - 找不到 NSManagedObject.h 文件错误

android - 如何将 SliverGrid 集成到 TabBarView 中?

ios - NSUserDefaults boolForKey 在 iOS 8 中不起作用

objective-c - NSUserDefaults 无法保存和读取我的自定义对象

ios - 在 SwiftUI WidgetKit 中的何处添加观察者

ios - Swift ARC 和 block

swift - 数据不会从核心数据本地存储加载

ios - 当 UIWebView 完成加载 Ajax 时获取回调

swift - 如何从swift发送确认邮件

ios - 应用程序退出时保存 NSUserDefaults