我正在尝试创建一个自定义UIViewControllers数组,每个都包含一个UIWebView。在for循环中,在“loadRequest”中,我得到“致命错误:在展开Optional值时意外地发现nil”。肯定有一个带有URL的NSURLRequest,正在传入。如果我注释掉“reportVC.reportWebView.loadRequest(request)”,一切都运行得很好。
func createViewControllers(callback:(controllers:[ReportViewController])->()){
var urls = [NSURL]()
getPDFs { (pdfURLs) -> () in
urls = pdfURLs
let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main",bundle: nil)
var reportControllers = [ReportViewController](count: urls.count, repeatedValue: ReportViewController())
for (index,url) in enumerate(urls){
var reportVC : ReportViewController = mainStoryboard.instantiateViewControllerWithIdentifier("ReportVC") as ReportViewController
//reportVC.title = ""
let request = NSURLRequest(URL: url)
reportVC.reportWebView.loadRequest(request)
reportControllers[index] = reportVC
if reportControllers.count == urls.count{
callback(controllers: reportControllers)
}
}
}
}
非常感谢任何指导。感谢。
答案 0 :(得分:4)
reportWebView
reportVC
实例中的ReportViewController
很可能未绑定(绑定到nil
)。 Xcode IB将IBOutlets声明为“隐式解包的选项” - 您需要为它们提供初始值。如果不这样做,第一次访问该属性时,将导致运行时异常。
通过确保reportWebView
绑定到UIWebView
来修复错误 - 无论是在故事板还是代码中。
答案 1 :(得分:0)
此外,在调用loadRequest()之前,请确保已正确初始化UIWebView对象。如果没有,您可能希望将URL存储在类的成员对象中,直到执行viewWillAppear()。
然后,从viewWillAppear()内部调用loadRequest()。