这部分是偏好问题。由于 API 调用会产生未知的延迟,因此应用程序应显示指示其忙碌的 UI。我的偏好是让 UI 在请求之前尽可能多地完成。(我的幼稚认知模型是,在获取数据的同时查看新 VC 的 UI 会瞬间占据用户的大脑,使延迟看起来更短)。
因此,我更喜欢描述请求的 VC 的参数 - 例如要在详细信息 VC 上获取的联系人 ID,并在 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
}
}];
}
}