0

この「チュートリアル」を使用して、「コレクション」という配列をインターフェイス上のNSTableviewにバインドしました:http: //www.cocoadev.com/index.pl? NSArrayController

interfacebuilderのものはそれほど難しくありません。配列内のデータを実際にビューに表示しようとすると、難しくなります。

私の.hファイル:

@interface MyDocument : NSDocument
{
    NSMutableArray *collection;
    //other variables
}

そして私の.mファイルで:

@implementation MyDocument
@synthesize collection;
     //quite some functions

     inside one function (that works):
     [collection addObject:fileName];

     //some other functions

     inside the init function:
     collection = [[NSMutableArray alloc] init];

これで、配列はインターフェイスとその中のテーブルビューに適切にバインドされていると思います、もちろん、テーブルビューとその列は特定の方法で入力する必要があります。現在、アイテムを追加しても何も表示されません。コレクションaddObject:fileName関数を使用

フィールドで満たされた1つのアイテムとしてサブ配列を作成する必要がありますか?そして、これらの値/フィールドを特定の列にバインドするにはどうすればよいですか。(フィールドは「アーティスト」、「タイトル」などです)

Interface Builderのすべての列を、コントローラーキー' arrangedObjects 'およびモデルキーパス' artist '、' title 'などを使用してArrayControllerにバインドしました。

私はこのアレイコントローラーのことは絶対に得られないとゆっくりと考え始めているので、説明を簡潔にしてください... Objective-Cはそれほど難しくはないようですが、必要なバインディングは私が得られないものです。Appleの例は初心者には十分ではありません

4

2 に答える 2

2

通常、データを入力するには、各行にディクショナリ(キーはkeyPathであり、データをオブジェクト化します)を使用します。さらに、データを表すクラスを作成し、各行に新しいインスタンスを作成します。バインディングは最初は少し注意が必要です(Cocoaを初めて使用する場合は、最初にデータソースメソッドに慣れてください)が、このチュートリアルここの例を参照してください。どちらにもサンプルが含まれており、ダウンロードして、InterfaceBuilderでバインディングがどのように設定されているかを正確に調べることができます。

于 2009-01-27T21:19:51.817 に答える
1

配列を変更しただけでは、配列が変更されたことはわかりません。ミューテーションの KVO 通知を送信する必要があります。

これを行う正しい方法は、プロパティのアクセサー メソッドを実装してから、独自のアクセサーを呼び出すことです。この場合、insertObjectInCollection:atIndex:配列の長さをインデックスとして実装して渡す必要があります ([self insertObjectIntoCollection:fileName atIndex:[self countOfCollection]も実装した後countOfCollection)。

アクセサーを実装すると、オブジェクトがプロパティにバインドされると、Cocoa はアクセサーを KVO マジックでラップし、ミューテーションの適切な通知を送信します。

于 2009-01-27T23:35:08.470 に答える