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

时间:2018-04-10 05:29:26

标签: ios swift

这里我在容器视图中显示视图控制器,这里我需要传递多个数据,但是这里没有任何东西从视图控制器传递到另一个,任何人都可以帮助我如何实现它?

这是我的代码,如下所示

let controller:PaymentViewController = self.storyboard!.instantiateViewController(withIdentifier: "paymentPage") as! PaymentViewController
controller.view.frame = CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height)
controller.carrierCode = self.responseData[0].carrierCode
controller.methodCode = self.responseData[0].methodCode
controller.willMove(toParentViewController: self)
self.view.addSubview(controller.view)
self.addChildViewController(controller)
controller.didMove(toParentViewController: self)
controller.guestShippingAddressModel = self.guestShippingAddressModel

我尝试使用用户默认值将模型类数据传递给另一个,但它没有成功,我使用了以下数据

这是我的代码

 if let jsonData = try? JSONEncoder().encode(self.guestShippingAddressModel) {
   print("To Save:", jsonData)

   //Save as data
   UserDefaults.standard.set(jsonData,forKey: "guestAddress")
  }

解码我在代码

下使用的模型类数据
if let data = UserDefaults.standard.data(forKey: "guestAddress"),
   let sorts = try? JSONDecoder().decode(GuestAddress.self, from: data) {
    print("Retrieved:", sorts)
    self.guestShippingAddressModel = sorts
 }

1 个答案:

答案 0 :(得分:0)

如果model是可以存储在内存中的对象,则可以将其传递给'PaymentViewController'的属性:

class PaymentViewController : UIViewController {

  <...>
  var model: GuestAddress?
  <...>
}

<...>
//in caller
let controller:PaymentViewController = self.storyboard!.instantiateViewController(withIdentifier: "paymentPage") as! PaymentViewController
controller.model = self.guestAddressModel
<...>

如果模型太大而无法将其存储在内存中。您可以将其保存在光盘上的某个位置,并使用其路径来获取所需的数据 您还可以使用CoreData管理应用程序内的模型,并将CoreData对象传递给PaymentViewController(CoreData对象使用延迟加载数据)。