非常简单的用例:假设一个 iOS 应用程序显示一个带有电影列表的MovieListController
视图(在 a 内)。UINavigationController
当用户触摸一个时,应用程序将 a 推MovieDetailController
送到导航堆栈上(即[[MovieDetailController alloc] initWithMovieId:(NSString *)
。在MovieDetailController
'sviewDidAppear:
方法中,它进行 HTTP 调用以根据传递给它的电影 ID 检索详细信息。
挑战在于立即将其MovieDetailController
推送到导航堆栈上,并且在尚未检索到详细信息的一两秒钟内,视图会显示一堆空白字段,这是不可取的。
为了解决这个问题,我正在考虑MovieListController
不要MovieDetailController
立即将其推入堆栈。相反,它会设置一个进度指示器(我使用的是 SVProgressHUD),然后调用将启动 HTTP 调用MovieDetailController
的方法。initWithMovieId:
然后当接收到数据时,MovieDetailController
会进行回调MovieListController
以删除进度指示器,然后将其推MovieDetailController
送到导航堆栈上。
这种情况有更好的模式吗?我是否应该考虑在MovieDetailController
准备好时将其推送到导航堆栈上?
注意:我考虑过加载详细视图并放置一个活动指示器,但您仍然可以在它后面看到一个看起来有点奇怪的“空视图”。我也考虑过只MovieListController
检索细节本身,但这似乎打破了封装模型——MovieListController
应该只关心列出电影,而不是它们的细节。
有什么想法吗?这部电影的东西只是一个例子 - 在这里寻找一般模式。