2014-09-01 57 views
0

我有一个包含一个按钮的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() 

} 

image1 img3 img2

回答

0

因为我已经发现了这个问题,我跑的优胜美地测试版4,和Xcode的贝塔7.这些不工作很好地结合在一起显然我现在感觉非常愚蠢的。现在我已更新,它一切正常。

0

你是什么意思迷上了另一个NSViewController按钮是什么意思?在将第二个视图分配给子类之前,原始控制器中是否还有其他属性或方法?按钮的目标位置和动作是什么?

你能发布错误日志吗?

+0

我基本上控制 - 从NSButton拖到第二个NSViewController。在我的问题中附加了原始视图控制器中的几个方法。我不是故意愚蠢的,但是因为控制台中没有发布错误,所以我该如何获取错误日志?谢谢,杰克 – 2014-09-02 08:41:05

+0

你可以发布故事板和该按钮连接到第二个视图控制器?我很想知道第二个视图控制器中的动作是什么。我是否正确理解,当你将nsviewcontroller的子类分配给第二个视图并按下第一个视图控制器中的按钮时,也就是当它崩溃时? @杰克C – contactritsard 2014-09-03 23:48:32

+0

这是正确的,我添加了一些图像,我的答案。 @contactritsard – 2014-09-04 15:56:31

相关问题