gpt4 book ai didi

iphone - RESTful iOS 应用程序 - 何时更新模型 - 最佳实践

转载 作者:可可西里 更新时间:2023-11-01 03:56:11 26 4
gpt4 key购买 nike

让我们来看一个典型的 RESTful iOS 应用程序,比方说一个联系人应用程序,主屏幕是联系人列表,当点击联系人时,您会进入联系人详细信息屏幕。

联系人列表是通过 REST API 获取的,联系人详细信息是通过另一个 API 获取的。

您将使用哪个事件来触发对这些 API 的调用:

  • viewDidAppear 在两个 View Controller 上
  • viewWillAppear 在两个 View Controller 上
  • 在主视图 Controller 中,在调用 pushViewController:detailViewController 之前调用联系人详细信息 API
  • 还有其他事件吗?

目前我主要在这种情况下使用 viewWillAppear,或者在某些特定情况下使用 viewDidAppear,但为了标准化我的编码实践,我想确定这些不同方法的优缺点。

最佳答案

部分是偏好问题。由于 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
}
}];
}
}

关于iphone - RESTful iOS 应用程序 - 何时更新模型 - 最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14573136/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com