IOS Swift 致命错误:在展开可选值时意外发现 nil
Posted
技术标签:
【中文标题】IOS Swift 致命错误:在展开可选值时意外发现 nil【英文标题】:IOS Swift fatal error: unexpectedly found nil while unwrapping an Optional value 【发布时间】:2015-08-06 14:34:16 【问题描述】:我是ios编程和整个编程的初学者。
(我有一个 XCODE 6.4)
我的 TableViewController 中有一个代码,其中有一个数据,我想将其传递给另一个 viewController。我在互联网上阅读了很多关于它的内容,而不是我编写了这段代码:
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
let identifier = "formuleTableViewCell"
let cell = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath) as! formule
let formuleCommand = formulesList[indexPath.row]
// Configure the cell...
var shortCut = formuleCommand.formuleText
cell.formuleLabel.text = shortCut
return cell
var valueToPass:String!
func tablView(tableView: UITableView!, didSelectRowAtIndexPath indexPath: NSIndexPath!)
println("You selected cell #\(indexPath.row)!")
// Get Cell Label
let indexPath = tableView.indexPathForSelectedRow();
let currentCell = tableView.cellForRowAtIndexPath(indexPath!) as UITableViewCell!;
let identifier = "formuleTableViewCell"
let cell = tableView.dequeueReusableCellWithIdentifier(identifier, forIndexPath: indexPath!) as! formule
valueToPass = cell.formuleLabel.text
performSegueWithIdentifier("detail", sender: self)
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
if (segue.identifier == "detail")
// initialize new view controller and cast it as your view controller
var viewController = segue.destinationViewController as! specialitiesViewController
// your new view controller should have property that will store passed value
viewController.passedValue = valueToPass
在我的 TableViewController 中,我有单元格,其中包含带有一些数据的标签。我想将此标签中的数据传递给另一个 ViewController。当我运行我的应用程序时,没有错误,但是当我单击一个单元格时,它必须将我移动到另一个 ViewController(我为此设置了一个 segue)打印一个错误:fatal error: unexpectedly found nil while unwrapping an Optional value
和应用程序崩溃。请帮我解决这个错误!
感谢您的建议!
【问题讨论】:
【参考方案1】:你已经将valueToPass
定义为一个隐式展开的可选 - 即,你告诉 iOS 这里总是会有一个值。
所以当prepareForSegue
被调用,而你还没有设置valueToPass
任何东西时,它会失败。你应该用一些值来初始化它。
【讨论】:
【参考方案2】:我建议使用此代码打开您的视图控制器(如果您有要打开的 VC 的类)。
let viewController = self.storyboard?.instantiateViewControllerWithIdentifier("your_Storyboard_id") as! Your_VC_Class
self.navigationController?.pushViewController(viewController, animated: true)
【讨论】:
【参考方案3】:如果您在初始化时不知道valueToPass
的值,但可能在稍后的某个时间知道该值,您应该将 valueToPass 设为可选:
var valueToPass: String?
...然后在需要时将其解包并处理未正确初始化的情况。
如果您在初始化时不知道valueToPass
的值,但将在视图控制器出现时知道该值,那么您应该将其保留为隐式展开的可选(即按原样),但请确保在使用前将其设置为有效值。
旁注:一般来说as?
比as!
对我们更好,并处理演员表不起作用的情况。
【讨论】:
以上是关于IOS Swift 致命错误:在展开可选值时意外发现 nil的主要内容,如果未能解决你的问题,请参考以下文章
“致命错误:在 Swift ios 中使用 vImageBuffer_initWithCGImage 时在展开可选值时意外发现 nil”
Swift:致命错误:在初始化 UIlabel 值时展开可选值时意外发现 nil