0

如果在解雇时我不知道该视图是否已完全创建,我该如何优雅地解雇视图?

这是我的困境。该视图显示了从服务器请求的一些数据。因此我异步发送服务器请求viewDidLoad因此,如果请求失败与否,

对于“关闭”视图,我使用退出 segue(故事板)。

所以有两种情况:

  • viewDidAppear调用后发生服务器端错误。然后我可以打电话performSegueself.navigationController.pop...一切都很好。
  • viewDidAppear调用之前发生服务器端错误。在这种情况下,如何将用户导航到上一个视图?

现在我只是将服务器请求发送到,viewDidAppear但这很不酷,因为用户长时间查看空视图:(

你会怎么处理这个?

4

3 回答 3

1

更新做一个标志,即

@property (nonatomic, assign) BOOL requestFailedOrViewDidAppear;

在 viewDidLoad 开始或 init 方法中将其设置为 NO。然后在您的服务器端错误处理程序中执行以下操作:

if (requestFailedOrViewDidAppear) {
    //return to previous view
}
else {
    requestFailedOrViewDidAppear = YES;
}

也将相同的代码放入 viewDidAppear。

这在实现方面更加优雅。但是,如果您希望它在 UI/UX 方面更优雅,请将“//return to previous view”替换为创建并显示解释错误的 UIAlertView 的代码。然后,当用户关闭该警报视图时,您可以返回到前一个视图。

于 2013-09-02T09:26:55.020 回答
0

假设您的用户希望在呈现的视图上显示一些信息,如果请求之前失败viewDidAppear,我会等到视图出现,显示错误,然后关闭视图。否则,如果请求在 之后失败viewDidAppear,我只会显示错误并关闭请求观察方法上的视图。这将是我处理这个问题的方式。

于 2013-09-02T09:41:44.600 回答
0

原来有一个intflagUIViewController那叫_appearState。当它为 2 时,表示视图已出现。

于 2013-09-02T20:37:41.593 回答