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

标签 iphone ios api model-view-controller rest

让我们来看一个典型的 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/

相关文章:

iphone - 消息与电子邮件

iphone - 核心数据关系

ios - Cordova /Phonegap-iOS : iPad Icon Requirement Error in Application Loader

c++ - 树形 View 所选项目索引

iphone - 使用 UIWebView loadRequest 的常规 block 56、1024、8、244、24 内存泄漏

iphone - 在表格 View 单元格中调整图像大小

iphone - JSON 响应在 NSArray 中转换后显示空白值

ios - 从非协议(protocol)类型 'UICollectionViewFlowLayout' 继承

python - 盈透证券(IB)Python API : Unable to run the IB tutorial sample on VS Code

javascript - Node 和 Redis : Redis Clients