我试图连续使用两个PFQueryTableViewControllers,以便在第一个控制器中选择的行生成带有详细查询的第二个tableview。我认为这是常见的事情。
第二个视图控制器抛出此消息:
***由于未捕获的异常终止应用程序' NSInternalInconsistencyException',原因:' - [UITableViewController loadView]加载了" EQR-J7-VNh-view-gYk-IB-w7b" nib但没有得到UITableView。'
我有一个"节目" segue在第一个表中的单元格和新视图控制器之间定义,但是当它发生时,上面的消息出现,第二个控制器永远不会被调用。如果我将第二个控制器类更改为常规UIViewController,一切正常。
我得到的印象是我需要重新设计PFQueryTableViewController作为.nib中的UIViewController,但我不知道如何做到这一点或为什么Parse将其定义为其他东西。任何人都可以启发我。我来自Swift的观点,并且想到了基于故事板的UI。
以下是代码:
目标(第二)视图控制器:
import Parse
import UIKit
import ParseUI
class ClubDetailsViewController: PFQueryTableViewController {
override init(style: UITableViewStyle, className: String!) {
super.init(style: style, className: className)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// Configure the PFQueryTableView
self.parseClassName = "USACourses"
self.textKey = "course_name"
self.pullToRefreshEnabled = true
self.paginationEnabled = false
self.objectsPerPage = 10
}
@IBOutlet weak var detailClubName: UILabel!
@IBOutlet weak var detailAddress: UILabel!
@IBOutlet ...
First View Controller:
import UIKit
import Parse
import ParseUI
class ClubTableViewController: PFQueryTableViewController {
// Initialise the PFQueryTable tableview
override init(style: UITableViewStyle, className: String!) {
super.init(style: style, className: className)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
// Configure the PFQueryTableView
self.parseClassName = "USAClubs"
self.textKey = "club_name"
self.pullToRefreshEnabled = true
self.paginationEnabled = true
self.objectsPerPage = 20
}
override func queryForTable() -> PFQuery {
var query = PFQuery(className: "USAClubs")
query.orderByAscending("club_name")
return query
}
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath, object: PFObject?) -> PFTableViewCell {
var cell = tableView.dequeueReusableCellWithIdentifier("Cell") as! PFTableViewCell!
if cell == nil {
cell = PFTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: "Cell")
}
// Extract values from the PFObject to display in the table cell
if let nameClub = object?["club_name"] as? String {
cell?.textLabel?.text = nameClub
}
if let clubtype = object?["club_membership"] as? String {
cell?.detailTextLabel?.text = clubtype
}
return cell
}
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
var detailScene = segue.destinationViewController as! ClubDetailsViewController
// Pass the selected object to the destination view controller.
if let indexPath = self.tableView.indexPathForSelectedRow() {
let row = Int(indexPath.row)
detailScene.currentClubObject = (objects?[row] as! PFObject)
}
}
override func viewDidAppear(animated: Bool) {
// Refresh the table to ensure any data changes are displayed
tableView.reloadData()
} // end view did appear
}
答案 0 :(得分:0)
确保您设置为ClubDetailsViewController的ViewController是UITableViewController,而不是UIViewController。
PFQueryTableViewController是UITableViewController的子类,UITableViewController又是UIViewController的子类。为了使ViewController符合UITableViewController,它需要遵循某些规则,例如具有UITableView而不具有其他子视图。当您将UITableViewController拖到故事板上时,它会确保它遵循所需的规则。