【问题标题】:Exc_Bad_Instruction when using navigationController PushViewController使用 navigationController PushViewController 时的 Exc_Bad_Instruction
【发布时间】:2015-01-02 19:10:27
【问题描述】:

当用户选择表格单元格时,我试图推送到不同的视图,当我到达将要推送的位置时,它会引发错误。

这里的特殊情况是我在同一个 UIViewController 下使用 tableViews 处理两个 UIViews。因此,UIView 和 TableDelegate 都在它们自己的类中。

非常感谢任何建议。

import Foundation
import UIKit
import CoreData

class FavoritesViewController: UIViewController {

//MARK: - UIViewController Delegates
override func viewWillAppear(animated: Bool) {}
}


//MARK: - Lenders Table View Delegates
class FavoritesLenderViewController:  UIView, UITableViewDelegate, UITableViewDataSource {

let favoritesViewController = FavoritesViewController()
let lenderDetailsViewController = LenderDetailsViewController()

var lenders = Array<Lenders>()
var lenderUserComments = Array<LenderUserComments>()
let lendersModel = LendersModel()

//MARK:  View Parameters
@IBOutlet weak var favoriteLendersTableView: UITableView!

// Equivalent to viewWillAppear for a subclass.
override func willMoveToSuperview(newSuperview: UIView?) {
    self.lenders = lendersModel.readLenderData() as Array

    // Reload data (for when the user comes back to this page from the details page.)
    dispatch_async(dispatch_get_main_queue(), { () -> Void in
        self.favoriteLendersTableView.reloadData()
    })
}


func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    var favoritesViewController = FavoritesViewController()
    return self.lenders.count
}



// On selecting, send variables to target class.
func tableView(tableView: UITableView!, didSelectRowAtIndexPath path: NSIndexPath!) {

    // Setup what segue path is going to be used on selecting the row as set the type as the class for the view your going to.
    let lenderDetailsViewController = self.favoritesViewController.storyboard?.instantiateViewControllerWithIdentifier("LendersDetailsView") as LenderDetailsViewController

    // Get the lenderId from the selected path.row and put the values to the variables in the target class.
    let lendersNSArray = lenders as NSArray
    lenderDetailsViewController.lenderIdPassed = lendersNSArray[path.row].valueForKey("lenderId") as String!

    //  tell the new controller to present itself
// BREAKS HERE : EXC_BAD_INSTRUCTION code=EXC_I386_INVOP
    lenderDetailsViewController.navigationController?.pushViewController(lenderDetailsViewController, animated: true)

}

....//additional table delegates
}

【问题讨论】:

    标签: ios swift pushviewcontroller navigationcontroller


    【解决方案1】:

    您不会将新的视图控制器推向自身。试试这个:

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

    【讨论】:

    • 感谢 Suraj 的快速回复,我无法使用 self,因为“FavoritesLenderViewController”没有名为“navigationController”的成员。 UIViewController 似乎存在该成员,这是一个单独的类,我设置为在“FavoritesLenderViewController”类的顶部使用。如下调用它会引发相同的错误。 self.favoritesViewController.navigationController?.pushViewController(lenderDetailsViewController, animated: true)
    • 在界面生成器中单击第一个视图控制器,然后执行编辑器 > 嵌入 > 导航控制器。现在你有了 nacigationController 属性
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    相关资源
    最近更新 更多