7

を設定しようとしていますNSCollectionView(過去に成功しましたが、何らかの理由で今回は失敗しました)。

「TestModel」というモデルクラスがありNSString、文字列を返すだけのプロパティがあります(現在はテスト目的のためだけです)。次にNSMutableArray、メイン アプリのデリゲート クラスでプロパティ宣言を行い、この配列にTestModelオブジェクトのインスタンスを追加します。

次に、Content Array がアプリのデリゲートにバインドされた Array Controller を用意しますNSMutableArray。ここまでのすべてが正常に機能していることを確認できます。NSLogging:

[[[arrayController arrangedObjects] objectAtIndex:0] teststring]

うまくいきました。

次に、コレクション ビューのセットアップ (itemPrototype とコンテンツ)、およびコレクション ビュー アイテム (ビュー) に適切なバインディングをすべて用意します。次に、 Collection View にバインドされたコレクション アイテム ビューにテキスト フィールドを作成しますItem.representedObject.teststring。ただし、アプリを起動すると、コレクション ビューには何も表示されず、空白の白い画面だけが表示されます。私は何が欠けていますか?

更新:これが私が使用するコードです(wil shipleyによって要求されました):

// App delegate class

@interface AppController : NSObject {

NSMutableArray *objectArray;
}
@property (readwrite, retain) NSMutableArray *objectArray;
@end

@implementation AppController
@synthesize objectArray;

- (id)init
{
    if (self = [super init]) {
    objectArray = [[NSMutableArray alloc] init];
    }
    return self;
}


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    TestModel *test = [[[TestModel alloc] initWithString:@"somerandomstring"] autorelease];
    if (test) [objectArray addObject:test];
}
@end

// The model class (TestModel)

@interface TestModel : NSObject {
NSString *teststring;
}
@property (readwrite, retain) NSString *teststring;
- (id)initWithString:(NSString*)customString;
@end

@implementation TestModel
@synthesize teststring;

- (id)initWithString:(NSString*)customString
{
    [self setTeststring:customString];
}

- (void)dealloc
{
    [teststring release];
}
@end

そして、前述のように、Array Controller のコンテンツ配列はこの「objectArray」にバインドされ、NSCollectionView の Content は Array Controller.arrangedObjects にバインドされます。NSLogging [arrayController ArrangeObjects] によって配列コントローラーにオブジェクトが含まれていることを確認でき、正しいオブジェクトが返されます。NSCollectionView には何も表示されません。

更新 2: [collectionView content] をログに記録すると、何も得られません:

2009-10-21 08:02:42.385 CollViewTest[743:a0f] (
)

問題はおそらくそこにあります。

更新 3:ここで要求されたのは、Xcode プロジェクトです。

http://www.mediafire.com/?mjgdzgjjfzw

メニューバー アプリなので、ウィンドウはありません。アプリをビルドして実行すると、「test」というメニューバー項目が表示されます。これにより、NSCollectionView を含むビューが開きます。

ありがとう

4

1 に答える 1

4

問題は、KVC を正しく使用していないことです。できることは 2 つあります。

方法 1: シンプルだがエレガントではない

  1. 次のコードを使用して、オブジェクトを配列に追加します

[[self mutableArrayValueForKey:@"objectArray"] addObject:test];

これは、文字列値を使用して変数を指定する必要があるため、あまり洗練されていないため、スペルが間違っていてもコンパイラの警告は表示されません。

方法 2: 配列「objectArray」に必要な KVO メソッドを生成します。

  1. インターフェイス宣言でプロパティを選択します
  2. [スクリプト] (メニューバーのスクリプト アイコン) > [コード] > [アクセサ宣言をクリップボードに配置] を選択します。
  3. インターフェイス ファイルの適切な場所に宣言を貼り付けます。
  4. [スクリプト] > [コード] > [クリップボードにアクセサー定義を配置] を選択します
  5. 定義を実装ファイルの適切な場所に貼り付けます

次に、次のようなメソッドを使用できます

[self insertObject:test inObjectArrayAtIndex:0];
于 2009-11-03T06:34:46.083 に答える