swift 3应用程序试图以模态方式呈现一个主动控制器摄像头

时间:2017-02-20 21:44:51

标签: swift

我可以点击一个按钮并拉起相机胶卷并选择一个图像并让它填充一个空的图像。

接下来,我尝试添加一个让用户使用相机的按钮。

我正在学习一个教程,并为两个选项设置了安全规则。但是我仍然遇到一个说

的崩溃
  

应用程序尝试以模态方式呈现活动控制器

我搜索了SO并找到了答案,建议我替换我的行

Initial catalog=whdb

Application.StartupPath + @"\whdb.mdf"

然而,这只会导致另一个错误。

这是我拉动相机的完整代码

present(picker,animated: true,completion: nil)

有什么想法吗?

修改

我的代码现在看起来像这样

self.navigationController?.pushViewController(picker, animated: true)

我也试过这个

picker.allowsEditing = true
picker.sourceType = UIImagePickerControllerSourceType.camera
picker.cameraCaptureMode = .photo
picker.modalPresentationStyle = .fullScreen
present(picker,animated: true,completion: nil)

但现在发生的事情是它只是打开了相机胶卷,而在控制台中我看到了这个

  

尝试显示UIImagePickerController:0x1018c4000   Lended.AddAccountViewController:0x10116f540,其视图不在   窗口层次结构!

但应用程序没有崩溃,这很好

3 个答案:

答案 0 :(得分:3)

  

这是我拉动相机的完整代码

嗯,不,不是。你一直指的是picker。这必然表明某些变量或属性let picker = UIImagePickerController() // * picker.allowsEditing = true picker.sourceType = .camera // picker.cameraCaptureMode = .photo // picker.modalPresentationStyle = .fullScreen present(picker,animated: true,completion: nil) 已经存在。因此,还有其他代码初始化该变量,并且可能还有其他代码使用该变量。

我认为,这是问题的根源。不知何故,您不小心将此视图控制器投入使用。问题源于长期持有UIImagePickerController。唐'吨。执行此操作的代码总是会遇到问题。只需在使用之前创建一个选择器实例:

let src = UIImagePickerControllerSourceType.camera
guard UIImagePickerController.isSourceTypeAvailable(src) else {print("no camera"); return}
guard let arr = UIImagePickerController.availableMediaTypes(for:src) else {print("no types"); return}

let picker = UIImagePickerController()
picker.mediaTypes = arr
picker.allowsEditing = true
picker.delegate = self
self.present(picker, animated: true)

现在,我将向您展示一些实际可行的真实代码:

COLUMN_STRING;COLUMN_INT;COLUMN_TIMESTAMP
String_Value_1;123456;20131226224757
String_Value_2;234567;20141227234858
String_Value_3;345678;20151228214555

答案 1 :(得分:0)

感谢@matt,我能够摆脱我所遇到的错误。 但最后我不小心为第二个按钮创建了一个双IBAction ......

我通过打印"左"创建了一个简单的测试。对于按钮1和"对"按钮2。

当我点击左键时,它会向左打印,但当我点击右键时,它会左右打印。

在相机的环境中...相机会在不久前出现,但是由于它正在运行首先拉动相机的功能......相机从来没有机会。

有效的代码就是这个

  func useCamera() {
    if UIImagePickerController.isSourceTypeAvailable(UIImagePickerControllerSourceType.camera) {
      let picker = UIImagePickerController()
      picker.delegate = self
      picker.allowsEditing = true
      picker.sourceType = .camera
      present(picker, animated: true, completion: nil)
  }
}

答案 2 :(得分:0)

在您提到的评论中:

  

我只是将我的VC嵌入在导航控制器中...没什么疯狂的– RubberDucky4444

我和你有同样的错误,那正是我的问题。

给出我的导航/视图控制器:

let ccNavController = self.storyboard?.instantiateViewController(withIdentifier: "creditCardNavigationController") as! UINavigationController
guard let ccVC = ccNavController.visibleViewController as? CreditCardViewController else {
    fatalError("Unexpected controller: \(String(describing: ccNavController.visibleViewController))")
}

为视图控制器本身调用present时,我遇到了相同的错误。

self.present(ccVC, animated: true, completion: nil)

当我为导航控制器执行present时,它起作用了:

self.present(ccNavController, animated: true, completion: nil)