0

これを適切に表現しているかどうかはわかりませんが、基本的にはメイン アプリのデリゲートでこれを行います。

Application *app = [[Application alloc] initWithApplication:fullPath]

Application クラスには、アプリのパスを受け取り、appPath や名前などのプロパティを設定する initWithApplication メソッドがあります。次に、新しい「アプリ」オブジェクトをアプリケーションの NSMutableArray に追加します。

if (app) [applications addObject: app];

NSArrayController のコンテンツ配列はアプリケーションの NSMutableArray にバインドされ、さまざまなキー (appPath、名前など) が NSArrayController に設定されます。次に、名前の 1 つの列、パスの 1 つの列など、さまざまなプロパティにバインドされたさまざまな列を含むテーブル ビューを作成します。

次に、テーブル ビューで選択されたアプリを起動する起動ボタンがあります。これには、次のコードを使用します。

Application *app = [applications objectAtIndex:[tableView selectedRow]];

次に、現在選択されているアイテムのパスへの参照として「app.appPath」を使用します。これはうまくいきます。この問題は、filterPredicate を使用してテーブル ビューのコンテンツをフィルター処理するときに発生します。基本的に、テーブル ビュー内のすべてのアプリを除外し、検索ボックスに入力されたフレーズを名前に含むアプリのみを残します。

上記の方法は、テーブル ビュー内のアイテムのインデックスを取得するため機能しません。また、すべてのアイテムがテーブル ビューにないため、カウントがめちゃくちゃになります。たとえば、アプリケーション配列のインデックス 25 のアイテムである MyApp.app というアプリがあるとします。

上記のコードは、tableView と applications 配列に同じ数のオブジェクトがあるため、うまく機能します。ただし、テーブル ビューのコンテンツを除外すると、オブジェクトの数に違いが生じるため、間違ったアプリが起動されます。

私の説明があまり混乱しないことを願っていますが、説明するのは難しいです. これを回避する方法はありますか?

ありがとう

4

1 に答える 1

1

解決策は、知りたい人にとっては非常に簡単でした:

[[arrayController の選択] valueForKey:@"appPath"]

HTH

于 2009-09-26T23:00:16.623 に答える