2009-08-26 15 views
0

これは非常に初心者の質問です。これは何度も何度もやったことですが、今回は何かがありません。テーブルビューはバインディングに応じて更新されません

@interface AppDelegate : NSObject { 
NSArray *lines; 

} 

@property(readwrite, retain) NSArray *lines; 
@end 

そしてawakeFromNibメソッドでAppDelegate.mファイルで、私はそれをALLOC:

lines = [[NSArray alloc] init]; 
私はNSArrayのを宣言し、プロパティとして設定私のAppDelegate.hファイルで

次に、私は行の配列を設定するメソッドを持っています:

NSString *fileContents = [NSString stringWithContentsOfFile:[NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/sometextfile.txt"] encoding:NSUTF8StringEncoding error:NULL]; 
lines = [fileContents componentsSeparatedByString:@"\n"]; 

私は配列のコントローラを持っていますAppDelegate.self.linesには、Array Controller.arrangedObjectsにバインドされたテーブル列があります。配列が更新されている(NSLogを使ってテストされている)のですが、テーブルの内容が更新されていない(空白のままです)ことを確認できます。

ここには何かがありますか?

+0

「エラー:NULL」をしないでください。その声明で間違っていることがいくつかありますし、あなたは*起こっていないか知りたくありません。 –

答えて

4

バインディングを使用している場合は、データソースは必要ありません。どちらか一方。

I have an array controller thats bound to "AppDelegate.self.lines" …

なぜself

@property(readwrite, retain) NSArray *lines;

いいえ、ここcopyを使用しています。さもなければ、他の誰かが変更可能な配列を保持していることがわかります。それであなたの知らないうちにあなたの配列が変わってしまいます。

Then I have a method that sets the lines array:

lines = [fileContents componentsSeparatedByString:@"\n"]; 

これは表に何も表示されない理由です。あなたはプロパティを経由していない、インスタンス変数に直接アクセスしている。直接インスタンス変数アクセスはKVO通知を引き起こさないため、アレイコントローラは変更について決して見つけません。

さらに悪いことに、古いアレイを漏らしていることになります。新しい配列を保持していないので、そのインスタンス変数はまもなく死んだオブジェクトを保持します。自動保持は、setLines:メソッドで行います。このメソッドは、呼び出すときにのみ呼び出されます。

あなたが財産を通過する必要があります。

self.lines = [fileContents componentsSeparatedByString:@"\n"]; 

プロパティへのアクセスは、暗黙のアクセサメッセージであるので、(私は上記の提案として、あなたが@propertyを修正した後、またはコピーし)これは配列を保持し、両方とKVO通知を投稿します。

+0

おかげでトントンピーター、それは完全に働いた:) – indragie

2

tablviewデータソースを設定すると、列に配置されたalignedObjectsがあるとしますか?テーブルビューのデータソースを行配列に設定しない場合は、

+0

OK、コンテンツアレイがAppDelegate.self.linesに設定されているアレイコントローラがあります。次に、Array Controllerの配置されたオブジェクトをテーブルの列にバインドします。私はtのデータソースを設定していない、私は必要ですか? – indragie

+0

ennuikiller:バインディングはデータソースの代替品です。 –

0

read through thisとすると良い図と説明があります。エンナウキラーが言っていることは正しいです、私はあなたのデータソースには問題があると思います。これは呼び出しによって行われます。

[aTable setDelegate:aDelegate]; 
+0

データソース/デリゲートをメインのアプリケーションデリゲートとアレイコントローラの両方に設定しようとしましたが、どちらもうまくいきませんでした。 – indragie

関連する問題