2016-04-19 22 views
0

コンパイラの3行目のcrashsesと私はどこでもNSTableRowViewサブクラスを初期化する方法は?

class ItemRowView: NSTableRowView { 
    convenience override init(frame: NSRect) { 
     self.init(frame: frame) // EXC BAD ACCESS 
     self.draggingDestinationFeedbackStyle = NSTableViewDraggingDestinationFeedbackStyle.None 
    } 

答えて

0

まず、init(frame: NSRect)指定イニシャライザであるため、キーワードconvenienceはこの場所で間違っているNSTableRowView初期化子に関する情報を見つける傾けます。 おそらく、super初期化子をあなた自身のメソッドより再帰的に呼び出すことを意味していました。 最後に次のコードは、あなたが行くを取得する必要がありますinit?(coder: NSCoder)

別の必要な初期化を実装する必要があります:

エラー
class ItemRowView: NSTableRowView { 
    override init(frame: NSRect) { 
     super.init(frame: frame) // super - not self 
     self.draggingDestinationFeedbackStyle = NSTableViewDraggingDestinationFeedbackStyle.None 
    } 

    required init?(coder: NSCoder) { 
     // Write something useful here, or leave the default implementation 
     fatalError("init(coder:) has not been implemented") 
    } 
} 
+0

を。便利な初期化子から 'self.init'を使って、指定された初期化子に委譲する必要があります。しかし、指定された初期化子は継承されておらず、私自身の実装を書く方法はわかりません。 – fff

+0

さて、すでに指定された初期化子をオーバーライドしています。 [NSView Class Reference - initWithFrame:](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSView_Class/#//apple_ref/occ/instm/NSView/initWithFrame :)を参照してください。 。 'convenience'キーワードを削除し、必要な初期化子を追加すると、それが動作します。私はそれに応じて答えを更新します。 – Lasse

+0

スーパー、ありがとう – fff

関連する問題