それは部分的に好みの問題です。API 呼び出しによって不明な遅延が発生するため、アプリはビジーであることを示す UI を表示する必要があります。私の好みは、リクエストの前にできる限り多くのことを UI に行わせることです。(私の単純な認識モデルでは、新しい VC がデータをフェッチしているときに UI を見ると、ユーザーの頭が一瞬だけ占有され、遅延がはるかに短く見えるというものです)。
したがって、詳細 VC でフェッチされる連絡先の ID など、要求を説明する VC のパラメータを優先し、viewDidAppear で要求を実行します (データがまだキャッシュされていないか、更新が必要な場合)。そのメソッドでは、フェッチが行われていることを示す UI を配置して、次の形式をとります。
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (/* i don't have my model or it's out of date */) {
// put up 'i am busy' UI
MyRequestClass *request = // form a request that fetches my model
[request runWithBlock:^(id result, NSError *error) {
// i build my request classes to run with blocks simplifying the caller side
// if it's a json request, then pass a parsed result back to this block
// remove 'i am busy' UI
if (!error) {
// init my model from result
// other parts of this class observe that the model changes and updates the UI
} else {
// present error UI
}
}];
}
}