0

私は Xcode 4.3 を使用しており、長年プログラマーとして働いてきましたが、Xcode にはやや慣れていません。

メモリ内のファイルからコンテンツを取得する UITable を含む First という UIView があります。次に、First のテーブルの内容を変更するデータ ファイルを変更する Second という名前のサブビュー UIView を作成します。Second を削除して First に戻ると、驚くことではありませんが、テーブルは更新されません。次回 First が最初から読み込まれると、テーブルには行われた変更が反映されます。

最初に、テーブルに必要なデータを含むファイル内のデータから NSArray をロードするために使用されるメソッド viewDidLoad が含まれています。Second から viewDidLoad を呼び出すことはできますが、テーブルが新しく変更された NSArray から更新されない限り、テーブルは変更前と同じように表示されます。

したがって、私の問題は、Second を削除して First に戻ったときに First のテーブルが更新されるように、Second からテーブル メソッドを呼び出す方法です。データをテーブルにロードするテーブル メソッドを呼び出してみましたが、コンパイル エラーが発生して失敗しました。最初に戻ったときにテーブルが更新されるようにテーブル関数を呼び出す方法を知る必要があります。

私の問題の少なくとも一部は、期待どおりに viewDidLoad から呼び出されないため、テーブルの更新がどのように呼び出されるかわからないことです。

申し訳ありませんが、それは問題の長い説明です。私が書いている残りのプログラムの多くは機能しており、この問題に数か月間取り組んできました。私は数週間ごとに戻って、もう一度刺しますが、今のところ運がありません. 私の理解を深め、問題を解決するために、あなたが提供できる助けを本当に感謝します.

修正後のコードは次のとおりです。最初の(スーパービュー)関連コード

 -(void)viewDidLoad {  
    NSFileManager * fm = [[NSFileManager alloc] init];  
    NSError* err = nil;  
    NSPredicate *fltr = [NSPredicate predicateWithFormat:@"self ENDSWITH '.dir'"];  
    NSArray *array = [fm contentsOfDirectoryAtPath: userFolder error:&err];  
    self.listData = [array filteredArrayUsingPredicate:fltr];  
    [self.tableView reloadData]; //This does the updating must make table an IBOutlet as  
    [super viewDidLoad];         //described in one of the comments by m. Othman  
}    

修正後のコードは次のとおりです。2 番目の (サブビュー) 関連コード。このコードは、テーブルの表示に影響を与える変更が行われるメソッドに配置されています

UIView * start = [self.view superview]; //this line and next two call viewDidLoad in first  
UIResponder * nextResponder = [start nextResponder];  
[nextResponder viewDidLoad];  
4

2 に答える 2

0

UIViewController API リファレンスを読みましたか? ビューの(再)出現を処理するための -viewDidLoad 以外のオプションがあります...

于 2012-06-18T18:48:39.790 に答える
0

まあ、UITableViewデリゲートはビューの読み込み時またはリロードを要求したときに呼び出されます..
したがって、 viewDidLoad または tableview のコンテンツを変更する必要があるメソッドで、この行を記述する必要があります

[tableview reloadData];

私はあなたの質問を理解することを願っています!!

于 2012-06-20T14:20:35.507 に答える