0

最近、アカウントなしで別のスレッドを開始したので、他のユーザーがこれをフォローできるように、プログラムへの現在のリンクを編集できるように、アカウントを使用してここに質問を再投稿しています。以下のコードも更新しました。これが私の最初の質問です:

ここでOutlineviewsとDNDに関する他の投稿を読みましたが、プログラムを動作させることができません。この投稿の下部には、私のプロジェクトのzipへのリンクがあります。アウトラインビューとボタンだけの非常に基本的なものです。ドロップされたテキストファイルを受信したいのですが、コードまたは接続に問題があります。AppleのNSOutlineドラッグアンドドロップのサンプルコードに従ってみましたが、何かが足りません。1つの違いは、私のプログラムはドキュメントベースのプログラムであり、その例はそうではないということです。ドラッグアンドドロップとボタンアクションを処理するコードがあるので、ファイルの所有者をデリゲートアクションを受け取るように設定しました。それはおそらく単純な間違いなので、誰かがそれを見て、私が間違っていることを教えてもらえますか?ファイルへのリンクは次のとおりです:http://dl.dropbox.com/u/7195844/OutlineDragDrop1.zip

4

1 に答える 1

9

NSOutlineViewのドラッグ検証メッセージに応答していません。

元のコードが実装されtableView:validateDrop:proposedRow:proposedChildIndex:ました。その質問で指摘したように、テーブルビューがアウトラインビューの場合、それは間違っています。NSOutlineViewは、テーブルビューのドラッグ検証メッセージを送信せず、アウトラインビューのドラッグ検証メッセージのみを送信します。

その後、ドラッグ検証メソッドを次のように宣言するように変更しました。

- (NSDragOperation)outlineView:(NSOutlineView*)view
                validateDrop:(id <NSDraggingInfo>)info
                 proposedRow:(int)row
          proposedChildIndex:(NSInteger)index

しかし、実際にはそのようなメッセージを送信するものはありません。

NSOutlineViewが行インデックスを処理することはめったにないことに注意してください。これは、親行が展開および折りたたまれたときに行インデックスが変更される可能性があるためです。代わりに、一般的にモデルオブジェクトである「アイテム」を扱います。

したがって、正しい検証方法は次のとおりです。

- (NSDragOperation)outlineView:(NSOutlineView*)view
                validateDrop:(id <NSDraggingInfo>)info
                proposedItem:(id)item
          proposedChildIndex:(NSInteger)index

セレクターの3番目のコンポーネントの名前と、それに付随する引数のタイプと名前に注意してください。

この変更を適用すると、データソースはドロップを検証します。

于 2010-05-24T06:51:13.687 に答える