Xcode 当另一个viewController显示为工作表时,NSViewController崩溃
我有一个包含按钮的NSViewController。此按钮连接到故事板中的另一个NSViewController,以便按下该按钮时,第二个ViewController显示为图纸覆盖。这非常有效,我得到了我想要的外观,但是当我将NSViewController子类化并将该子类分配给第二个NSViewController时,出现了一个问题。无论是否有自定义类,第一个都可以正常工作。如果我确实为第二个类分配了一个自定义类,我会让该类完全按照如下所示的方式创建,但是当我按下按钮时,我没有得到错误代码(除了控制台中恼人的LLBD打印),应用程序崩溃。如果有人能就我的错误之处提出建议,或者提供一种更好的错误日志以便我更好地进行故障排除的方法,我们将不胜感激。请询问更多信息/屏幕截图。Swift和objective-c的答案都很好Xcode 当另一个viewController显示为工作表时,NSViewController崩溃,xcode,macos,cocoa,swift,Xcode,Macos,Cocoa,Swift,我有一个包含按钮的NSViewController。此按钮连接到故事板中的另一个NSViewController,以便按下该按钮时,第二个ViewController显示为图纸覆盖。这非常有效,我得到了我想要的外观,但是当我将NSViewController子类化并将该子类分配给第二个NSViewController时,出现了一个问题。无论是否有自定义类,第一个都可以正常工作。如果我确实为第二个类分配了一个自定义类,我会让该类完全按照如下所示的方式创建,但是当我按下按钮时,我没有得到错误代码(除
import Cocoa
class CustomVC: NSViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Do view setup here.
}
}
以下代码用于我的初始视图控制器。它包含3组数据以填充表格视图,具体取决于按下NSSegmentedController的哪个段。该工作表将用于向数组中添加新项目-它将弹出屏幕,以便我可以在将其保存到其中一个数组之前输入新的详细信息。希望这是有道理的
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()
}
连接到另一个NSViewController的按钮是什么意思?在将第二个视图指定给子类之前,原始控制器中是否有其他属性或方法?按钮的目标位置和操作是什么
你能发布错误日志吗?我现在觉得自己很愚蠢,因为我发现了问题所在,我正在运行Yosemite Beta 4和Xcode Beta 7。显然,这两种方法在一起效果不太好。现在我已经更新了,一切都很好。我基本上控制着从NSButton到第二个NSViewController的拖动。原始视图控制器中有几个方法,我已将它们附加到我的问题中。我并不是故意装傻,但由于控制台中没有发布错误,我该如何获取错误日志呢?谢谢,Jack,你能把故事板和按钮连接到第二个视图控制器上吗?我很想知道第二个视图控制器中的操作是什么。当您将nsviewcontroller的子类指定给第二个视图并按下第一个视图控制器中的按钮时,即当它崩溃时,我是否正确地理解了这一点@杰克:是的,我在回答中添加了一些图片@contactritsard