Rails バックエンドで起動するたびにサーバーとデータを同期するアプリがあります。API は完全に機能しますが、インターフェイスを更新する必要があるときにインターフェイスが応答しなくなるという問題があります。
現在、同期を開始するために GCD を使用しています。
Sync *sync = [[Sync alloc] init];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
[sync force_sync:@""];
[appModel updateSyncTime:current_time];
});
同期が完了したら、Sync オブジェクトから NSNotification をアプリに送信して、インターフェイスを更新します。
dispatch_async(dispatch_get_main_queue(), ^{
[[NSNotificationCenter defaultCenter] postNotificationName:@"Sync-Completed" object:self];
});
通知を受信すると、他のクラスは次のように UITableView にデータをリロードするだけです。
- (void)notificationReceived:(NSNotification *)notification {
[dataTable reloadData];
}
通知が受信されるまで、UI は完全にレスポンシブです。通知を受信すると、更新が完了するまで UITableViews を他の UI 要素間でスクロールできません。これを行うためのより良い方法があると確信していますが、どのように?
前もって感謝します!