在AppDelegate Swift中传递全局用户名

时间:2015-08-05 08:26:52

标签: ios swift authentication appdelegate

在我发布另一个问题后,我现在尝试在swift中的AppDelegate类中声明一个全局用户名变量。我的目标是让用户在启动屏幕中输入他的用户名,然后在其他视图中的标签上弹出该用户名 - 简单的通用用户名。

我在AppDelegate类中声明了用户名

class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?
    var userName = ""

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

在我的主控制器中,我有一个标签和一个设置名称的按钮功能

class ViewController: UIViewController {

    @IBOutlet var userLabel : UILabel!

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func setName (){ 
        appDelegate.userName = userLabel.text!;

    }
}

这个想法就是这个名字会在我的player2控制器的标签中弹出

import Foundation
import UIKit

class Player2 : UIViewController {

    @IBOutlet var player2 : UILabel!

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate


    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        self.player2.text = appDelegate.userName as? String

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

2 个答案:

答案 0 :(得分:0)

几个解决方案:

  1. 使用NSUserDefaults存储用户名 在你AppDelegate:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
            NSUserDefaults.standardUserDefaults().setObject("VitaliyGozhenko", forKey: "Username")
            return true
        }
    
  2. 在你的UIViewController中:

    override func viewDidLoad() {
        super.viewDidLoad()
        userLabel.text = NSUserDefaults.standardUserDefaults().objectForKey("Username")
        }
    
    1. 创建单独的类User,用于存储与用户相关的用户名,电子邮件和其他信息,并添加类属性[User currentUser]以存储当前用户信息。在此之后,您可以访问应用程序中的所有当前用户信息
    2. 在新文件User.swift中为User创建新类:

      import UIKit
      
      class User: NSObject {
      
          static let currentUser = User()
      
          var username:String?
      }
      

      之后你可以修改你的AppDelegate:

          func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
                  User.currentUser.username = "VitaliyGozhenko"
                  return true
              }
      

      在你的UIViewController中:

      override func viewDidLoad() {
          super.viewDidLoad()
          userLabel.text = User.currentUser.username
          }
      

答案 1 :(得分:0)

以下是将userNameViewController传递到另一个ViewController的一种简单方法。

//Set your userName with specific key 
@IBAction func setName (){
    NSUserDefaults.standardUserDefaults().setObject(userLabel.text, forKey: "userName")
}

之后,您可以通过SecondViewController这种方式从这个方式读取该值:

override func viewDidLoad() {
    super.viewDidLoad()
    let userName = NSUserDefaults.standardUserDefaults().objectForKey("userName") as! String
    player2.text = "\(userName)"

}

您无需将任何变量声明为AppDelegate类。

只需从userLabel.text课程中获取ViewController的值并存储即可。之后,您可以在项目的任何位置从NSUserDefaults阅读。