iPhoneアプリの操作を同期する方法を見つけるのに苦労しています。私は3つの主要なNSOperationを持っています。
NSInvocationOperation *showSpinner = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(spinnerOn:) object:YES];
NSInvocationOperation *reloadDatasource = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(reloadDatasource) object:nil];
NSInvocationOperation *hideSpinner = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(spinnerOn:) object:NO];
// Add dependency
[reloadDatasource addDependency:showSpinner];
[hideSpinner addDependency:reloadDatasource];
[self.queue addOperation:showSpinner];
[self.queue addOperation:reloadDatasource];
[self.queue addOperation:hideSpinner];
3つの操作が順番に正しく開始されていることがわかります。ただし、ご想像のとおり、最初の操作ではUIViewを作成して上部にアタッチし、最後の操作では削除する必要があります。
グラフィカルに言えば、操作は画面上で一度に発生します。そのため、スピナーが画面に表示されているときにテーブルが既に読み込まれていることや、その他の奇妙な同期されていないことがわかります。
グラフィック側の変更はメインスレッドで発生することを理解しました。だから私は、コードを変更して、本来の機能を実行するにはどうすればよいかを尋ねています。スピナーを作成し、データをロードし、スピナーを削除しますか?グラフィック操作とデータ操作を分離する一般的な方法はありますか?たとえば、2つの異なる操作を作成します。
ありがとう