我希望有人可以帮助我解决我遇到的这个问题。
我正在尝试将UIViewController
的数组添加到UIPageViewController
。但是,每当我尝试通过方法instantiateViewController
访问视图控制器时,都会收到SIGABRT错误。
let vc: UIViewController = self.storyboard?.instantiateViewController(withIdentifier: views[index]) as! UIPageViewController
这是我的整个ViewController.swift文件,仅供参考。
import UIKit
class ViewController: UIViewController {
var pageViewController: UIPageViewController!
var views: [String] = ["view1","view2"]
override func viewDidLoad() {
super.viewDidLoad()
self.pageViewController = self.storyboard?.instantiateViewController(withIdentifier: "pageViewController") as! UIPageViewController
var arr: [UIViewController] = []
for i in 0..<views.count{
arr.append(assignView(index: i))
}
self.pageViewController.setViewControllers(arr, direction: .forward, animated: true, completion: nil )
self.addChildViewController(self.pageViewController)
self.view.addSubview(self.pageViewController.view)
pageViewController.didMove(toParentViewController: self)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func assignView (index: Int) -> UIViewController{
let vc: UIViewController = self.storyboard?.instantiateViewController(withIdentifier: views[index]) as! UIPageViewController
return vc
}
}
有人可以告诉我为什么我的代码会给我这个错误吗?
非常感谢你!
答案 0 :(得分:0)
从以下一行: self.storyboard?.instantiateViewController(withIdentifier:“pageViewController”)as! UIPageViewController
似乎故事板被视为可选。当你试图访问它时,故事板变量可能是nil.Ideally它不应该是nil而不应该是可选的。 如果有目的地完成了可选项,那么您可以在访问之前应用“if let”进行检查。
如果您需要进一步澄清,请与我们联系。
答案 1 :(得分:0)
SIGABRT是受控制的崩溃,应用程序主要是故意终止的。这主要是程序员的错误造成的。
寻找以下内容,因为有两种可能的原因导致崩溃。
答案 2 :(得分:0)
考虑以下示例
var mainView: UIStoryboard!
mainView = UIStoryboard(name: "Main", bundle: nil)
let samplecontroller : UIViewController = mainView.instantiateViewController(withIdentifier: "iPhone")
在上面的示例中,mainView是我的实例引用的StoryBoard,它是隐式展开的(这是为了指定这不能为零) samplecontroller是storyBoard中场景的实例。 “iPhone”是场景的StoryBoardID的名称。
如果我的故事板已正确设置并使用了ID和名称,则此片段将确保mainView永远不会为零。
在此之后,您仍然可以进行安全检查,如
if let test = mainView {
//Do your stuff
}
如果有帮助,请告诉我。