2011-01-13 15 views
0

私の最新のプログラムでは、NSTableViewを使用して左側に単語を表示し、右側に単語を表示します。これらの単語と定義は.plistファイルからロードされ、アプリケーションの起動時にはテーブルビューはこれらの単語と定義を読み込んで表示します。私の問題は、ユーザーがテキストボックスとボタンを使用して単語と定義を追加しようとすると、その単語が実際に.plistに追加されます。つまり、メソッドは正常に実行されていますが、テーブルビューは新しい行を表示しません。私がプログラムを終了してからそれを開くと、tableviewは新しい行を表示します。私は、テーブルビューが適切に接続されているかどうかを調べるために、selectedRowやdataSourceなどの他のメッセージを送信し、すべてが応答と返され、適切な応答があるかどうかを調べました。現在、dataSourceおよびdelegateとして使用されているクラスは、すべての変数と辞書を持つメインクラスのサブクラスです。 (私は可能な限り小さなクラスを使用することで大きなです)。最後に、reloadDataの前にnoteNumberOfRowsChangedを挿入しようとしましたが、まだ何もありません。NSTableViewはリロードされません

私はすべてをテストしましたが、reloadDataメソッドは何も開始していないようです。私の言ったように、私のテーブルビューにはメッセージが送信されています。新しい情報は実際にはdicitinoary adn配列に追加されています。行数はcountメソッドによって更新されています。再起動すると、すべて正常に表示されます。以下は関連コードです。ここでcurrentWordListとcurrentDefitionListはデータとデータソースを保持する辞書です。editLibraryCardListはリロードしようとしているNSTableViewです。

DataSourceクラスコード:

@interface EditorDataTable : SAT_Vocab_MacController { 
    IBOutlet NSTableColumn *editLibraryWordColumn; 
    IBOutlet NSTableColumn *editLibraryDefinitionColumn; 
} 

- (int)numberOfRowsInTableView:(NSTableView *)tableView; 

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row; 

@end 

@implementation EditorDataTable 

- (int)numberOfRowsInTableView:(NSTableView *)tableView { 
    return ([currentWordList count]); 
} 

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(int)row { 
    if (tableColumn == editLibraryWordColumn) { 
     return [currentWordList objectAtIndex:row]; 
    } 
    if (tableColumn == editLibraryDefinitionColumn) { 
     return [currentDefinitionList valueForKey:[[currentWordList objectAtIndex:row]lowercaseString]]; 
    } 
} 

@end 

リストに単語を追加する方法:日および任意のアイデアを立ち往生されてIv'e

がお手伝いします!ありがとう。ザック

+1

「私はできるだけ小さなクラスを使用するのが大変です」これはあなたのiOSプロジェクトを維持する悪夢にさせます。 iOSフレームワークは、多くの集中クラスを持つように設計されています。できるだけ少数のクラスにすべてを詰め込もうとすることで、フレームワークとあらゆる方法で戦い、不必要な頭痛を与えることになります。それと戦わないでください。 – kubi

答えて

0

あなたはリロードが発生したことを確認するために、selectRowAtIndexPathメソッドにデバッグを試みたことがありますか? (あなたが[tableView reloadData]を呼び出した後でこれを見ることができるはずです)あなたはUITableViewControllerを使用していますか?あなたはそのが行われたときに、あなたが試みることができる知ってリロード後にコールバックを望んでいた場合

:興味がある人のために

[tableView reloadData]; 
    [self performSelector:@selector(selectRowAtIndexPath:) withObject:indexPath afterDelay:0.0]; 
0

、私は、メインクラスにデータソースサブクラスから自分のコードを移動し、それが働きました。私はあなたがdataSourceをサブクラス化することはできないと思う。お役に立てれば!

関連する問題