NSCollectionView は何も描画しません
質問
をセットアップしようとしています 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:シンプルだけどそこまでエレガントではない
- 次のコードを使用してオブジェクトを配列に追加します
[[self mutableArrayValueForKey:@"objectArray"] addObject:test];
これは、文字列値を使用して変数を指定する必要があるため、あまり洗練されていません。そのため、スペルが間違っていてもコンパイラの警告が表示されません。
方法 2:配列「objectArray」に必要な KVO メソッドを生成します。
- インターフェイス宣言でプロパティを選択します
- [スクリプト] (メニューバーのスクリプト アイコン) > [コード] > [配置] を選択します。 クリップボードのアクセサ decls
- 宣言を インターフェイス ファイルの適切な場所
- [スクリプト] > [コード] > を選択します。 クリップボードのアクセサ定義
- 定義を 実装ファイル内の適切な場所
次に、次のようなメソッドを使用できます。
[self insertObject:test inObjectArrayAtIndex:0];