Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xcode 当另一个viewController显示为工作表时,NSViewController崩溃_Xcode_Macos_Cocoa_Swift - Fatal编程技术网

Xcode 当另一个viewController显示为工作表时,NSViewController崩溃

Xcode 当另一个viewController显示为工作表时,NSViewController崩溃,xcode,macos,cocoa,swift,Xcode,Macos,Cocoa,Swift,我有一个包含按钮的NSViewController。此按钮连接到故事板中的另一个NSViewController,以便按下该按钮时,第二个ViewController显示为图纸覆盖。这非常有效,我得到了我想要的外观,但是当我将NSViewController子类化并将该子类分配给第二个NSViewController时,出现了一个问题。无论是否有自定义类,第一个都可以正常工作。如果我确实为第二个类分配了一个自定义类,我会让该类完全按照如下所示的方式创建,但是当我按下按钮时,我没有得到错误代码(除

我有一个包含按钮的NSViewController。此按钮连接到故事板中的另一个NSViewController,以便按下该按钮时,第二个ViewController显示为图纸覆盖。这非常有效,我得到了我想要的外观,但是当我将NSViewController子类化并将该子类分配给第二个NSViewController时,出现了一个问题。无论是否有自定义类,第一个都可以正常工作。如果我确实为第二个类分配了一个自定义类,我会让该类完全按照如下所示的方式创建,但是当我按下按钮时,我没有得到错误代码(除了控制台中恼人的LLBD打印),应用程序崩溃。如果有人能就我的错误之处提出建议,或者提供一种更好的错误日志以便我更好地进行故障排除的方法,我们将不胜感激。请询问更多信息/屏幕截图。Swift和objective-c的答案都很好

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