我想通过以下方式准备我的 segue:
override func prepareForSegue(segue: UIStoryboardSegue?, sender: AnyObject?) {
if segue?.identifier != "fromOpenChatsToLogIn" {
if let controller: ChatViewController? = segue?.destinationViewController as? ChatViewController {
if let cell: onlineUserCell? = sender as? onlineUserCell {
let user = OneRoster.userFromRosterAtIndexPath(indexPath: tableView.indexPathForCell(cell!)!)
controller!.recipient = user
}
}
}
}
onlineUserCell
是我的自定义单元格。另外,这是我的 userFromRosterAtIndexPath:
class func userFromRosterAtIndexPath(indexPath indexPath: NSIndexPath) -> XMPPUserCoreDataStorageObject {
return sharedInstance.fetchedResultsController()!.objectAtIndexPath(indexPath) as! XMPPUserCoreDataStorageObject
}
所以,当我选择我的单元格时,它崩溃了:
fatal error: unexpectedly found nil while unwrapping an Optional value
在线:
let user = OneRoster.userFromRosterAtIndexPath(indexPath: tableView.indexPathForCell(cell!)!)
怎么了?我该如何解决?
最佳答案
首先,Swift 引入了类型推断,最好的做法是正确使用它,所以这样写你的代码
if let controller = segue?.destinationViewController as? ChatViewController {
if let cell = sender as? onlineUserCell {
}
}
您还应该在 Xcode 中设置一个异常断点 ( here ),以便更清楚地看到崩溃的位置。
你的情况是
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
您应该使用以下语句:
if segue.identifier == "fromOpenChatsToLogIn" {
} else {
}
您的登录 ViewController 不需要用户,因此它崩溃了
let user = OneRoster.userFromRosterAtIndexPath(indexPath: tableView.indexPathForCell(cell)!)
因为没有cell
,prepareForSegue
中的sender
绝对不是cell。
对于第二个问题,修复很简单。
您正在发送 OneRoster.userFromRosterAtIndexPath(indexPath: indexPath)
performSegueWithIdentifier("fromUsersListToChatView", sender: OneRoster.userFromRosterAtIndexPath(indexPath: indexPath))
所以您不需要单元格或任何东西,因为您已经有了 user
对象!
像这样设置收件人
:
controller?.recipient = sender as? XMPPUserCoreDataStorageObject
只需将您的 prepareForSegue
方法替换为以下内容即可:
if segue.identifier == "fromOpenChatsToLogIn" {
} else {
let controller = segue.destinationViewController as? ChatViewController
controller?.recipient = sender as? XMPPUserCoreDataStorageObject
}
关于ios - Swift PrepareForSegue NSIndexPath 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32688602/