将“用户”对象从一个视图控制器传递到另一个

DemCodeLines

我正在开发一个快速的应用程序,而当前的任务是将检索到的“用户”对象发送到下一个视图控制器。

它以Sign-In vc开头,我向服务器发出请求并获取适当的数据:

import UIKit
import Security

class SignInVC: UIViewController {

    @IBOutlet weak var email_field: TextField!
    @IBOutlet weak var password_field: TextField!
    let httpHelper = HTTPHelper()

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    @IBAction func SignIn_Tapped(sender: AnyObject) {
        // ...
        if self.email_field.text!.characters.count > 0 &&
            self.password_field.text!.characters.count > 0 {
                makeSignInRequest(self.email_field.text!, pass: self.password_field.text!)
        }
    }

    func makeSignInRequest(email:String, pass:String) {
        let httpRequest = httpHelper.buildRequest("login", method: "POST",
            authType: HTTPRequestAuthType.HTTPBasicAuth)
        httpRequest.HTTPBody = "{\"email\":\"\(email)\",\"password\":\"\(pass)\"}".dataUsingEncoding(NSUTF8StringEncoding);
        httpHelper.sendRequest(httpRequest, completion: {(data:NSData!, error:NSError!, description:NSMutableString!) in
            do {
                let jsonData = try NSJSONSerialization.JSONObjectWithData(data!, options:NSJSONReadingOptions.MutableContainers ) as! NSDictionary
                if let user = jsonData["user"]! as? NSDictionary {
                    let curr_user = User(
                        id: user["id"]! as! Int,
                        name: user["name"]! as! String,
                        pic_url: user["status"]! as! String
                    )
                    if let mainController = self.storyboard?.instantiateViewControllerWithIdentifier("NewTabViewController") as? UITabBarController {
                            print(curr_user)
                            self.navigationController?.pushViewController(mainController, animated: true)
                    }
                } else {
                    print("error")
                }
            } catch {
                print("error")
            }
        })
    }
}

现在,我要做的就是将curr_user对象传递mainController但是我不知道怎么做。

我也一直在进行大量搜索,并且有很多人提出了“代表和协议”的建议,但是我还没有找到一个很好且相关的示例。因此,如果您也建议这样做,请提供一些有关我的代码的示例。

法哈德

PrepareForSegue,NSUserDefault和Singleton

您可以根据自己希望如何处理这些数据的方式,选择几种将数据传递到其他视图的方法,我将为您解释每种方法,然后您可以选择最适合您需要的一种。


prepareForSegue方法

如果您要保留数据进行1次segue转换,则建议使用此方法,这是在您需要prepareForSegue在新视图中创建另一个视图之后将其再次传递给另一个视图的一个很好的原因这是有关如何执行此操作的示例:

首先,您在两个视图中都创建了2个变量,其中1个用于发送(currentViewController.swift),而1个用于接收(toViewyourGoingController.swift)。

currentViewController.swift var dataToSend: AnyObject?
ViewYourGoingController.swift var dataToReceive: AnyObject?

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {

    //Check your segue, this way you can transfer different data to different view. also make sure the identifier match your segue.
    if segue.identifier == "toViewYourGoing" {

        //Initial your second view data control
        let ExchangeViewData = segue.destinationViewController as! toViewyourGoingController
        
        //Send your data with segue 
        ExchangeViewData.dataToReceive = dataToSend
    }
}

NSUserDefault

现在,如果您希望在安装应用程序后一直保持数据有效,则此方法很好,一旦删除该应用程序,该方法将自动重置。您还可以根据需要选择更新密钥的值,这是NSUserDefault的操作方法:

我一直喜欢将NSUserDeafult注册为默认设置,很多人只是继续执行第二步而不进行注册。

在AppDelgate.swift中注册NSUserDefault

NSUserDefaults.standardUserDefaults().registerDefaults(["valueName": AnyObject])

将Value设置为NSUserDefault,这取决于您要存储的数据类型,如果您确实进行了注册,则应与您注册的数据类型匹配。(下面的布尔数据类型示例)

NSUserDefaults.standardUserDefaults().setBool(true, forKey: "valueName") //Bool Data Type

将值设置为NSUserDefault后,请确保同步,这样它将立即更新,否则有机会更新。

NSUserDefaults.standardUserDefaults().synchronize()

接收值:由于我们设置了布尔值并注册了布尔值,因此它将接收布尔值。

let Variable: Bool! = NSUserDefaults.standardUserDefaults().boolForKey("valueName")

辛格尔顿

现在单例基本上是一个全局变量,您可以在任何视图中使用它们,但是某些开发人员会遇到一些错误和困难,使用它的风险由您自己承担,建议您在确定将大量使用该数据时使用此方法(仍然有风险),但是此方法就像是数据处理的女神:)。

创建一个NSObject 子类并调用它DataManager.swift(我称其为数据管理器,因为它处理数据。),如下所示:

导入UIKit

class DataManager: NSObject {
        
   //Store Data Globally
   static var someData: Boo! //This Boolean, you can choose whatever you want.
}

static就是使您的数据保持活动状态的原因。

现在,您可以someData像处理任何数据类型一样从任何地方存储和接收

//Store
DataManager.someData = true

//Receive 
print(DataManager.someData)

挑战:

您也可以使用

钥匙扣Sergey Kargopolov将带您逐步了解如何使用第三方使用快速钥匙扣。否则,您将面临更大的挑战并自己创建一个:P。

iCloud中的键值数据

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将“用户”对象从一个视图控制器传递到另一个

来自分类Dev

将NSManagedObject从一个视图控制器传递到另一个

来自分类Dev

Rails-将参数从一个视图传递到另一个控制器

来自分类Dev

如何将数据从一个视图控制器传递到另一个SWIFT

来自分类Dev

将NSManagedObject从一个视图控制器传递到另一个

来自分类Dev

如何将数据从一个视图控制器传递到另一个SWIFT

来自分类Dev

使用Firebase将图像从一个视图控制器传递到另一个(swift)

来自分类Dev

如何将数据从一个视图控制器传递到另一个?

来自分类Dev

将模型从一个控制器传递到另一个

来自分类Dev

如何将数据从一个视图控制器传递到另一个视图控制器,并且在视图控制器之间有一个显示视图控制器

来自分类Dev

如何将 NSMutableDictionary 从一个视图控制器传递到另一个视图控制器?

来自分类Dev

如何通过重定向URL将模型属性对象的值从一个控制器传递到另一个控制器

来自分类Dev

在Swift中将值从一个视图控制器传递到另一个

来自分类Dev

在Swift中将值从一个视图控制器传递到另一个

来自分类Dev

如何将对象数组从一个控制器传递到另一个?

来自分类Dev

如何将按钮从一个视图控制器隐藏到另一个

来自分类Dev

将特定数据从一个控制器传递到另一个

来自分类Dev

Rails 4将参数从一个控制器传递到另一个

来自分类Dev

似乎无法将数据从一个控制器传递到另一个

来自分类Dev

Javafx将参数和值从一个控制器传递到另一个

来自分类Dev

Rails 4将参数从一个控制器传递到另一个

来自分类Dev

将值从一个函数传递到控制器中的另一个函数

来自分类Dev

如何将响应从一个控制器传递到另一个?

来自分类Dev

将变量从一个控制器传递到另一个 Laravel 5.4

来自分类Dev

iOS-将数据传递到另一个视图控制器

来自分类Dev

将变量从页面视图控制器传递到另一个

来自分类Dev

如何将JSON对象从一个控制器传递到另一个(/ view to view)?

来自分类Dev

如何将数据从一个视图控制器传递到导航控制器中嵌入的另一个视图控制器

来自分类Dev

从一个视图路由到另一个控制器的操作方法,并将参数传递给该控制器的构造函数

Related 相关文章

  1. 1

    将“用户”对象从一个视图控制器传递到另一个

  2. 2

    将NSManagedObject从一个视图控制器传递到另一个

  3. 3

    Rails-将参数从一个视图传递到另一个控制器

  4. 4

    如何将数据从一个视图控制器传递到另一个SWIFT

  5. 5

    将NSManagedObject从一个视图控制器传递到另一个

  6. 6

    如何将数据从一个视图控制器传递到另一个SWIFT

  7. 7

    使用Firebase将图像从一个视图控制器传递到另一个(swift)

  8. 8

    如何将数据从一个视图控制器传递到另一个?

  9. 9

    将模型从一个控制器传递到另一个

  10. 10

    如何将数据从一个视图控制器传递到另一个视图控制器,并且在视图控制器之间有一个显示视图控制器

  11. 11

    如何将 NSMutableDictionary 从一个视图控制器传递到另一个视图控制器?

  12. 12

    如何通过重定向URL将模型属性对象的值从一个控制器传递到另一个控制器

  13. 13

    在Swift中将值从一个视图控制器传递到另一个

  14. 14

    在Swift中将值从一个视图控制器传递到另一个

  15. 15

    如何将对象数组从一个控制器传递到另一个?

  16. 16

    如何将按钮从一个视图控制器隐藏到另一个

  17. 17

    将特定数据从一个控制器传递到另一个

  18. 18

    Rails 4将参数从一个控制器传递到另一个

  19. 19

    似乎无法将数据从一个控制器传递到另一个

  20. 20

    Javafx将参数和值从一个控制器传递到另一个

  21. 21

    Rails 4将参数从一个控制器传递到另一个

  22. 22

    将值从一个函数传递到控制器中的另一个函数

  23. 23

    如何将响应从一个控制器传递到另一个?

  24. 24

    将变量从一个控制器传递到另一个 Laravel 5.4

  25. 25

    iOS-将数据传递到另一个视图控制器

  26. 26

    将变量从页面视图控制器传递到另一个

  27. 27

    如何将JSON对象从一个控制器传递到另一个(/ view to view)?

  28. 28

    如何将数据从一个视图控制器传递到导航控制器中嵌入的另一个视图控制器

  29. 29

    从一个视图路由到另一个控制器的操作方法,并将参数传递给该控制器的构造函数

热门标签

归档