【问题标题】:unwrap optional value nil展开可选值 nil
【发布时间】:2018-11-30 10:57:12
【问题描述】:

我是 ios 开发人员的新手。我使用函数将数据传递给一个视图控制器到另一个视图控制器

var vc = MessageViewController()
            vc.printSomething(address: address,id: id)

我将地址和 id 传递给 MessageViewController.In MessageViewController

func printSomething(address: String,id: String) {    
      print("address",address)
      print("id",id)     
      address_text.text = "\(address)"
}

上面的代码我打印地址,id 但是当我在UITextField address.text上设置地址时,我得到了解包错误。

【问题讨论】:

  • MessageViewController() - 这不是您实例化 ViewController 的方式。使用 nib 文件加载它们或让 Storyboard 为您实例化它。
  • @luk2302 你可以用MessageViewController() 启动视图控制器,不是吗?但大多数时候UIViewController 有一个 .xib 或一个故事板,在 Interface Builder 中有大量的 IBOutlet。当您执行 MessageViewController() 时,您只需初始化一个 MessageViewController 对象,但该初始化未与 xib/storyboard 链接,因此 IBOutlets 为零。
  • @Larme 是的,你可以,但我可以说 99% 肯定 OP 不希望有一个空的视图控制器,其中的出口为零。

标签: ios swift swift3 uitextfield


【解决方案1】:

我曾经创建一个类方法来像这样从情节提要中实例化视图控制器......

class MessageViewController: UIViewController {


 //other methods

  //MARK:- Class Method

  class func viewController() -> MessageViewController {
    return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "<Storyboard Id>") as! MessageViewController
   }


}

你只需要用来实例化视图控制器

var vc = MessageViewController.viewController()

您可以像下图那样设置故事板标识符。

【讨论】:

    【解决方案2】:

    您好,这是变量未分配给 address_text 的问题,因为 xib 在您的方法(printSomething)调用时未初始化,在此之前需要两个变量进行保存MessageViewController 中的地址和 id 并在 printSomething 方法中为这些变量分配 id 和地址,您可以在 viewdidload 方法中将这些值分配给 address_text MessageViewController

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多