皆さん、
以下のシナリオについてご意見をお聞かせください。私のアプリのほとんどの画面はテーブルビューであり、テーブルビューの行数と内容は、最初にローカルコアデータテーブルからデータを読み取り、次にいくつかの複雑な計算を実行することによって決定されます。これは、ユーザーが1つの画面から別の画面に移行しているときにアプリがフリーズしないようにしたいと思います。これが私がそれをした方法です。ビューに表示された関数では、アクティビティインジケーターのアニメーション化を開始し、スレッドを生成してコアデータテーブルからデータを読み取り、関連するすべての計算を実行します。このスレッド内で、計算が完了すると、アクティビティインジケーターのアニメーション化を停止し、初期化が完了したことを示すフラグをマークしてから、テーブルビューを再読み込みします。初期化が完了する前にテーブルビューセルをロードすると、空のセルが返されます。(テーブルビューのデータソース関数は、viewWillAppearの直後でViewdidAppear()の前に呼び出されることに気付きました)。以下に私のコードを貼り付けました:
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
NSLog(@"%s",__FUNCTION__);
}
-(void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
NSLog(@"%s",__FUNCTION__);
[activityOutlet startAnimating];
dispatch_async(myQueue, ^{ [self getFromCoreData];
});
}
- (void) getFromCoreData {
// Get from coredata and start calculations here
[activityOutlet stopAnimating];
activityOutlet.hidden = YES;
[tableOutlet reloadData];
}
上記を行うためのより良い方法があるかどうか知りたいのですが。
よろしくお願いします!