1

私はドラッグアンドドロップシステムを使用してユーザーがいくつかのファイルを入力できるようにするMac osx用の新しいアプリに取り組んでいます[この部分はうまく機能します]、ファイルのパスを表示したいtabelViewがあります入力しました。tableViewController.m に次のメソッドがあります。

-(void)add{
    NSLog(@"da");
    [list addObject:[[Source alloc] init]];
    [tableView reloadData];
}

DropView.mi には tableViewController.h が含まれており、add メソッドを呼び出そうとしていますが、何もしません:

#import "TableViewController.h"
.....
- (void)concludeDragOperation:(id<NSDraggingInfo>)sender{
    [self setNeedsDisplay:YES];
    TableViewController *tvc;
    [tvc add];
}

なぜそれが何もしないのかを誰かが理解できますか?

Edit1:答えを聞いた後、私は次のようになります。

- (void)concludeDragOperation:(id<NSDraggingInfo>)sender{
    [self setNeedsDisplay:YES];
    TableViewController *tvc = [[TableViewController alloc] init];
    [tvc add];
    [tvc rD];
}

rD は、reloadData メソッドを含む tableViewController のメソッドです。しかし、テーブルビューをリロードしないでください。任意のアイデア???

4

2 に答える 2

1

tvc実際のオブジェクトを指す必要があります。[[tvc alloc] init] それ以外の場合は、 add on を呼び出すだけですnil。これにより、他の言語で予想されるようにプログラムがクラッシュすることはありません。試してみて、何が起こるか見てください。

于 2012-11-17T00:22:26.520 に答える
1

OOP と Objective-C がどのように機能するかについて、かなりの部分を見逃しているようです (真剣に、そこに不快感はありません)。

DropView.m と tableViewController.h の間にどのようなリンクがありますか?

入力TableViewController *tvc;するだけで、ポインターを作成するだけです。オブジェクトを作成したり、オブジェクトを指したりするのではなく、メモリ内の tableViewController 型のオブジェクトを最終的に指すことができるポインターを作成しただけです。

解決:

あなたがする必要があるのは、どうにかして 2 つのクラス間のリンクを作成することです。たとえば、そのカスタム DropViewDelegate メソッドを使用する任意のクラスと通信できる DropView のカスタム デリゲート メソッドを作成できます。そのため、そのデリゲート プロトコルに従うオブジェクトに、ドラッグ操作を終了したことを伝えるデリゲート メソッドを作成できます。その方法のチュートリアルは、私のブログ[パーマリンクです] にあります。

コードを投稿できることをうれしく思います。または、私のブログで読むことができます。幸運を。

于 2012-11-17T00:50:31.487 に答える