Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.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
重新加载NSWindow Xcode Swift2_Swift_Nsview_Nsoutlineview_Nswindowcontroller - Fatal编程技术网

重新加载NSWindow Xcode Swift2

重新加载NSWindow Xcode Swift2,swift,nsview,nsoutlineview,nswindowcontroller,Swift,Nsview,Nsoutlineview,Nswindowcontroller,我正在开发一个NSOutlineView,它使用NSView子类在大纲中生成自定义单元格。这个我已经开始工作了,但是在大纲从模型类中吸取数据并正确显示之后,大纲从内存中释放(?)并变为nil,我还没有找到恢复它的方法 这是MainViewController类 class MainWindowController: NSWindowController, ShareInfoDelegate, NSOutlineViewDelegate, NSOutlineViewDataSource {

我正在开发一个NSOutlineView,它使用NSView子类在大纲中生成自定义单元格。这个我已经开始工作了,但是在大纲从模型类中吸取数据并正确显示之后,大纲从内存中释放(?)并变为nil,我还没有找到恢复它的方法

这是MainViewController类

class MainWindowController: NSWindowController, ShareInfoDelegate,    NSOutlineViewDelegate, NSOutlineViewDataSource {

override var windowNibName: String {

    return "MainWindowController"

}

@IBOutlet var daOutline: NSOutlineView!
//  The NSoutline I'm trying to get back to    
与测试数据有关的一些资料(略) 引导我们找到NSOutlineViewDataSource的东西

//MARK: - NSOutlineViewDataSource

func outlineView(outlineView: NSOutlineView, child index: Int, ofItem item: AnyObject?) -> AnyObject {
    if let item: AnyObject = item {
        switch item {
        case let work as Work:
            return work.movements[index]

        case let movement as Movement:
            return movement.tracks[index]

        default:

            let track = item as! Track
            return track.credits[index]
        }
    } else {
        if allWorks.count > 0 {

            return allWorks[index]
        }
    }
    let q = "patience"
    return q
}

func outlineView(outlineView: NSOutlineView, isItemExpandable item: AnyObject) -> Bool {
    switch item {
    case let work as Work:
        return (work.movements.count > 0) ? true : false

    case let movement as Movement:
        return (movement.tracks.count > 0) ? true : false

    case let track as Track:
        return (track.credits.count > 0) ? true: false

    default:
        return false
    }
}

func outlineView(outlineView: NSOutlineView, numberOfChildrenOfItem item: AnyObject?) -> Int {
    if let item: AnyObject = item {
        switch item {
        case let work as Work:
            return work.movements.count

        case let movement as Movement:
            return movement.tracks.count

        case let track as Track:
            return track.credits.count

        default:
            return 0
        }
    } else {
        return allWorks.count
    }
}



func outlineView(daOutline: NSOutlineView, viewForTableColumn theColumn: NSTableColumn?, item: AnyObject) -> NSView? {

          switch item {

        case let worked as Work:

            let cell = daOutline.makeViewWithIdentifier("newTry", owner:self) as! newTry

            cell.fourthLabel.stringValue = worked.composer

            cell.fourthCell.stringValue = worked.title

            return cell


        case let moved as Movement:

            let cell2 = daOutline.makeViewWithIdentifier("SecondTry", owner:self) as! SecondTry

            cell2.roman.stringValue = moved.name!

            cell2.details.stringValue = moved.sections!

            cell2.track.stringValue = "0"

            return cell2


        default:

            print("probably not")
    }

    print("not again")
    return nil
}

func outlineView(daOutline: NSOutlineView, heightOfRowByItem item: AnyObject) -> CGFloat {

    switch item {

    case let worked as Work:
        return 40

    default:
        return 24

    }        
}
还有橱窗里的东西

    override func windowDidLoad() {
    super.windowDidLoad()

    let nib = NSNib(nibNamed: "newTry", bundle: NSBundle.mainBundle())
    daOutline.registerNib(nib!, forIdentifier: "newTry")

    let nib2 = NSNib(nibNamed: "SecondTry", bundle: NSBundle.mainBundle())
    daOutline.registerNib(nib2!, forIdentifier: "SecondTry")

    //give Sender it's Receiver
    mailItOut.delegate = receiver

    allWorks.append(work1)
    allWorks.append(work2)

    work1.movements.append(move1)
    work1.movements.append(move2)
    work1.movements.append(move3)
    work1.movements.append(move4)

    work2.movements.append(move5)
    work2.movements.append(move6)
    work2.movements.append(move7)

    daOutline.reloadData()

    daOutline?.expandItem(work1, expandChildren: false)

   daOutline?.expandItem(work2, expandChildren: false)
}
}

最后是newTry NSView类的外观

class newTry: NSView {

var delegate: ShareInfoDelegate?



@IBOutlet weak var fourthCell: NSTextField!

@IBOutlet weak var fourthLabel: NSTextField!



@IBAction func cellAdd(sender: NSTextField) {

    var catchIt: String = String()



    catchIt = sender.stringValue

    if catchIt != "" {
     tryAgain = catchIt

    whichField = "title"

    //Trigger the sender to send message to it's Receiver
    mailItOut.sendMessage()

    }
}
cellAdd操作用于尝试将用户输入从文本单元格返回到模型中。为此,我(AFAIK)需要访问NSOutline(daOutline)并获取我所在的行,并将来自发送方的数据放入模型类的适当部分。这是我在一个标准(1个单元格/1个数据值)大纲中设法实现的。但是在这个原型中,据我所知,MainWindowController已经发布了它的所有内容,而daOutline是零(坏)


如何让XCode重新加载完成的大纲(或从不发布),并将daOutline设置为非nil状态?

对于出现导致NSOutline出口变为nil的两个问题之后的用户。第一个是在实现委托协议“shareInfoDelegate”时,我创建了MainWindowController的一个新实例,而不是其中包含数据的实例。这个新实例没有连接IBOutlets(或者没有任何有用的东西)。 一旦我放弃了代理,转而使用NSNotification更新有关NSView文本字段的信息,我的NSOutline就“回来了”

第二个更次要的问题是,在NSView nib文件中,我放置了和NSBox来模拟组行的行为(例如灰色背景)。作为一个副作用,NSBox抑制了大纲的正常行选择行为。这使得很难确定选择了哪一行。当我删除NSBox时,行选择变得更容易确定

特别是这个问题和Chuck的回答有助于发现这一点

真的谢谢(!)