質問

をセットアップしようとしています NSCollectionView (以前はこれを成功させましたが、今回は何らかの理由で失敗します)。

「TestModel」というモデルクラスがあり、 NSString 文字列を返すだけのプロパティ (現時点ではテスト目的のみ)。それから私は NSMutableArray メインアプリのデリゲートクラスでプロパティ宣言を行い、この配列に TestModel 物体。

次に、アプリデリゲートのコンテンツ配列をバインドした配列コントローラーを用意します。 NSMutableArray. 。ここまでのすべてが正常に動作していることを確認できます。NSロギング:

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

うまくいきました。

次に、コレクション ビューのセットアップ (itemPrototype とコンテンツ)、およびコレクション ビュー アイテム (ビュー) に適切なバインディングをすべて用意します。次に、コレクション アイテム ビューにテキスト フィールドを作成し、コレクション ビューにバインドします。 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 [arrayControllerariandObjects] によって、配列コントローラーにオブジェクトが含まれていることを確認でき、正しいオブジェクトが返されます。NSCollectionView には何も表示されないだけです。

更新 2:[collectionView content] をログに記録しても、何も得られません。

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

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

更新 3:リクエストどおりの Xcode プロジェクトは次のとおりです。

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

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

ありがとう

役に立ちましたか?

解決

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

方法 1:シンプルだけどそこまでエレガントではない

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

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

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

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

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

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

[self insertObject:test inObjectArrayAtIndex:0];
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top