无法从Mac OSX / Swift中的委托为NSCollectionView对象赋值

时间:2017-08-22 19:45:23

标签: swift macos nscollectionview

我的Mac OSX NSViewController意外动作。我在iOS开发时已经完成了UICollectionViews,但是对此感到难过。

我创建了一个CollectionView Item类来处理具有NSImage和NSLabel出口的类:

import Cocoa

class CollectionViewItem: NSCollectionViewItem {

@IBOutlet weak var messageThumb: NSImageView!
@IBOutlet weak var dateLabel: NSTextField!


    override func viewDidLoad() {
        super.viewDidLoad()
        view.wantsLayer = true
        view.layer?.backgroundColor = NSColor.lightGray.cgColor
        view.layer?.borderColor = NSColor.white.cgColor
        view.layer?.borderWidth = 0.0
    }

}

下面列出了代理并被触发,项目数量是正确的 - 所以我知道代表和来源是正确的。它正确地拉出项目视图(我相信 - 虽然,它说“object (null)”)在控制台中进行“po项目”运行

<Konch.CollectionViewItem: 0x6000001232a0>{represented object: (null),
view: <NSView: 0x600000123200> (frame {{0, 0.5}, {65, 87}}), selected:
NO}

但相关的NSImage和NSLabel总是以nil为单位,我无法为其赋值......

extension RecordViewController: NSCollectionViewDataSource {

    func numberOfSections(in collectionView: NSCollectionView) -> Int {
        return 1
    }

    func collectionView(_ collectionView: NSCollectionView, numberOfItemsInSection section: Int) -> Int {
        return self.messages.count
    }

    func collectionView(_ itemForRepresentedObjectAtcollectionView: NSCollectionView, itemForRepresentedObjectAt indexPath: IndexPath) -> NSCollectionViewItem {

        let item = collectionView.makeItem(withIdentifier: "CollectionViewItem", for: indexPath) as! CollectionViewItem
        let message = self.messages[indexPath.item]

        guard let collectionViewItem = item as? CollectionViewItem else {return item}

        collectionViewItem.dateLabel.stringValue = "SADFDF"

        return item
    }

}

我误解了什么吗?

更新: 这是我的xib xib file

和CollectionView VC上的IB出口

enter image description here

更新

回答@El番茄,我在Xib中命名了相关的类

enter image description here

1 个答案:

答案 0 :(得分:1)

让它工作,但仍然不完全理解为什么。

我想在Mac OS开发中,您不需要从对象创建出口到类。相反,我将我的插座连接到“对象” - &gt; “Collection View Item”如下所示。

enter image description here

出于某种原因,在没有任何IBOutlet引用的情况下,我可以在类中设置我的图像视图和标签,如下所示。

enter image description here

永远不需要注册xib或任何东西。

仍然混淆了整个系统如何协同工作。