JSONからデータをインポートして、CollectionViewの一部のアイテムのモデルとして使用していますが、初期化されていると思われます。しかし、何らかの理由でrepresentedObject
(以下、morpheme
という別名)が最初にnil
を返しています。したがって、nil値が表示されている場合はプレースホルダです。バインディングを使用するNSTextFieldsは初期化後に更新されません。
アイテムをクリックすると、クリックしたアイテムの名前がログに表示されるように設定されています。正常に動作し、デバッグのデフォルト値は返されません。だから私は同時進行性の問題が起こっていると推測しています。
詳細については、XCode 7がまだコレクションアイテムのプロトタイプでセグのバグを修正していないため、これは手動でプロトタイプ化されたアイテムです。ここで
私はうまくいけば、それは内のすべての重要な情報を取得するために管理スクリーンショットです:ここでは
が詳細にセルのコントローラー/ delagatingクラスのコードです:
///Acts as view controller for the items of the morpheme collection
public class MorphemeCell: NSCollectionViewItem, NSTextViewDelegate{
var backgroundColor = NSColor.clearColor()
var morphemeLabel: String{
get{
return morpheme?.morphemeDisplayName ?? "Morpheme"
}
}
var allomorphsLabel: String{
get{
return (morpheme?.allomorphsAsString ?? "Allomorphs")
}
}
///The morpheme data contained in the cell
public var morpheme : Morpheme?{
get{
return representedObject as? Morpheme
}
set{
representedObject = newValue
}
}
required public init?(coder: NSCoder) {
super.init(coder: coder)
}
///Detects clicks on each item
public override func mouseUp(theEvent: NSEvent) {
Swift.print("Clicked on " + morphemeLabel)
backgroundColor = NSColor.blueColor()
}
}
わかりませんこれが必要な場合は、メインウィンドウのViewControllerがセットアップ/ロード機能を実行している場合にのみ使用します。
ロードコード自体:だから
///Loads morpheme data into memory and then into the collection view
func loadMorphemeData(){
//Open morphemes.json and begin parsing
let morphemeDataPath = "morphemes"
if let file = NSBundle.mainBundle().URLForResource(morphemeDataPath, withExtension: "json")
{
let data = NSData(contentsOfURL: file)
let json = JSON(data:data!)
//Create Morpheme objects passing in JSON elements
for morphemeElement in json{
let toAdd = Morpheme(JSONElement: morphemeElement)
fullMorphemesList.append(toAdd)
}
///TODO Use full range or filters in final product
let morphemesToLoad = fullMorphemesList[0...100]
collectionView.content.appendContentsOf(Array(morphemesToLoad) as [AnyObject])
}
else
{
print("Resource Failure")
}
、要約:私はどちらかcollectionViewのセットアップを遅らせる、またはデータがになったらラベルを更新する方法を見つける必要があると思わ。 ありがとうございました!私はCocoaフレームワークにはとても新しいので、それはちょっとしたことでした。
スクリーンショットではなくコードを投稿 – vadian
プロパティKVOは準拠していますか? – Willeke
ああ、私はコードを忘れてしまったため、UIのアノテーションにはまってしまった。私はそれを更新しました。 私は完全にはわかりません。私はフレームワークにはとても新しいので、まだKVOのコンプライアンスを見ることはできませんでした。私はこれがライブバインディングの優先メソッドだと思いますか? – Alexandstein