我有一个包含一个按钮的NSViewController。此按钮连接到故事板中的另一个NSViewController,以便当按钮被按下时,secondViewController显示为一个Sheet Overlay。这很好,我得到了我想要的外观,但是当我继承NSViewController并将此子类分配给SECOND NSViewController时会出现问题。第一个可以正常工作,不管它是否具有自定义类。如果我确实将自定义类分配给第二个类,那么我将按照如下所示创建如何创建类,但是当按下按钮时,我不会收到任何错误代码(除了控制台中令人讨厌的LLBD打印外)和该应用程序崩溃。如果有人可以建议我做错了什么,或者可能是获得更好的错误日志的方法,以便我可以更好地排除故障,那将不胜感激。请索取更多信息/屏幕截图。在Swift和objective-c中的答案都很好。当另一个viewController显示为工作表时,NSViewController崩溃
import Cocoa
class CustomVC: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
}
}
下面的代码是我的初始视图控制器。它包含3组数据来填充tableView,这取决于NSSegmentedContoller的哪个段被按下。该工作表将用于将新项目添加到数组中 - 它将弹出屏幕,以便我可以在将它们保存到其中一个数组之前输入新细节。希望这是有道理的。
import Cocoa
class ViewController: NSViewController, NSTableViewDataSource, NSTableViewDelegate {
@IBOutlet weak var tableView: NSTableView!
var currentSegment = 0
var tableViewDataSite = ["Site 1", "Site 2", "Site 3", "Site 4", "Site 5"]
var tableViewDataSection = ["Section 1", "Section 2", "Section 3", "Section 4", "Section 5", "Section 6"]
var tableViewDataArea = ["Area 1", "Area 2", "Area 3", "Area 4"]
override func viewDidLoad() {
super.viewDidLoad()
NSNotificationCenter.defaultCenter().addObserver(self, selector: "tableViewCellDidFinishEditingText:", name: NSControlTextDidEndEditingNotification, object: nil)
// Do any additional setup after loading the view.
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
//MARK: - TableView Datasource & Delegate
func numberOfRowsInTableView(tableView: NSTableView!) -> Int {
switch currentSegment {
case 0:
return tableViewDataSite.count
case 1:
return tableViewDataSection.count
case 2:
return tableViewDataArea.count
default:
return 0
}
}
func tableView(tableView: NSTableView!, objectValueForTableColumn tableColumn: NSTableColumn!, row: Int) -> AnyObject! {
switch currentSegment {
case 0:
return tableViewDataSite[row]
case 1:
return tableViewDataSection[row]
case 2:
return tableViewDataArea[row]
default:
return 0
}
}
func tableViewCellDidFinishEditingText(notification:NSNotification) {
let fieldEditor: NSTextView? = notification.userInfo!["NSFieldEditor"] as? NSTextView
switch currentSegment {
case 0:
tableViewDataSite.removeAtIndex(tableView.selectedRow)
tableViewDataSite.insert(fieldEditor!.textStorage.string, atIndex: tableView.selectedRow)
//Fetch the Site object from parse and change the name to fieldEditor!.textStorage.string
tableView.reloadData()
break
case 1:
tableViewDataSection.removeAtIndex(tableView.selectedRow)
tableViewDataSection.insert(fieldEditor!.textStorage.string, atIndex: tableView.selectedRow)
//Fetch the Site object from parse and change the name to fieldEditor!.textStorage.string
tableView.reloadData()
break
case 2:
tableViewDataArea.removeAtIndex(tableView.selectedRow)
tableViewDataArea.insert(fieldEditor!.textStorage.string, atIndex: tableView.selectedRow)
//Fetch the Site object from parse and change the name to fieldEditor!.textStorage.string
tableView.reloadData()
break
default:
break
}
}
//MARK: - IBActions
@IBAction func segemtnedControlDidChange(sender: AnyObject) {
let segmentedControl = sender as NSSegmentedControl
currentSegment = segmentedControl.selectedSegment
tableView.reloadData()
}
我基本上控制 - 从NSButton拖到第二个NSViewController。在我的问题中附加了原始视图控制器中的几个方法。我不是故意愚蠢的,但是因为控制台中没有发布错误,所以我该如何获取错误日志?谢谢,杰克 – 2014-09-02 08:41:05
你可以发布故事板和该按钮连接到第二个视图控制器?我很想知道第二个视图控制器中的动作是什么。我是否正确理解,当你将nsviewcontroller的子类分配给第二个视图并按下第一个视图控制器中的按钮时,也就是当它崩溃时? @杰克C – contactritsard 2014-09-03 23:48:32
这是正确的,我添加了一些图像,我的答案。 @contactritsard – 2014-09-04 15:56:31