0

私の質問は、ビューのどの関数でコードを実行し、前のビューのすべての作業が完了していることを確認する必要があるかということです。保存されたすべてのデータと他に何がありますか?

これが私の状況であり、私はこの質問をします:私は3つのビューを持っています1)出発島2)到着島3)地図

出発島では、出発する島から選択できます。到着したい到着時に、地図上で、目的地に到達するためにたどる必要のあるルートを視覚的に確認できます。プログラム的に、最初の2つのビューは2つのテーブルビュー(島の名前の文字列のリスト)で、3つ目はルートを描画するシステムを備えた単純な画像ビューです。単純なSQLデータベースにデータを保存しますが、NSUserDefaultsを使用してデータを保存するのと同じ問題が発生しました。2つのテーブルビューは、彼らが選んだ島を保存します

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
     NSString *islandChoosen= [departureIsland objectAtIndex:indexPath.row];
     [[IslandDatabase database] saveOneRecord:@"1" name:arrivalIslandChoosen];
}

そしてクラスIslandDatabaseで

- (void) saveOneRecord:(NSString *)id name:(NSString *)name {

    NSLog(@"Saving data Partenza");
    sqlite3_stmt *statementINSERT;
    NSString somedataToInsertContainingNameofTheIsland;

    NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO aTable somedataToInsertContainingNameofTheIsland"; 
    NSLog(@"%@", insertSQL);

    sqlite3_prepare_v2(database,[insertSQL UTF8String], -1, &statementINSERT, NULL);
    sqlite3_step(statementINSERT);
    sqlite3_finalize(statementINSERT);

} *簡単にするために、実際のクエリのコードを省略しています

ここで、2番目の島を選択すると、マップに進み、マップのviewDidLoadで、ルートを構築するために選択した2つの島のデータを取得しようとします。そしてここに問題があります。選択した最初の島のデータは取得できますが、2番目の島のデータは取得できません。時間の問題です。

多くのテストを行いましたが、2番目のビュー(到着島)のdidSelectRowAtIndexPathで作成したデータの保存は、3番目のビュー(マップ)のviewDidLoadので実際に終了し、データを取得する時間がないようです。それらが必要な場合は、viewDidLoadでルートを描画するコードを実行します。データベースへのデータの実際の書き込み時にiが呼び出すNsLogは、マップビューが設計され、起動された後に表示されます。

3番目のビューviewDidLoadの開始時に、2番目の島のデータが利用可能になるまでしばらく試してみましたが、幸運はありませんでした。3番目のビューを設計する前にスタックしているようです...

4

1 に答える 1

0

- (void)viewWillAppear:(BOOL)animatedの代わりにを使用して、3番目のビューでデータをロードしてみてください。- (void)viewDidLoad

このviewDidLoadメソッドは、コントローラーがその階層をメモリーにロードしたときに呼び出されます。これは、パフォーマンスを最適化するために熱心に行われます。

于 2012-05-14T13:43:06.910 に答える