在数据返回之前发生对WebService segue的异步调用

时间:2014-10-02 14:18:59

标签: ios uistoryboard uistoryboardsegue

背景

我正在构建一个iOS应用程序,其中StoryBoard用于UI,AFNetworking用于后端。在我的UIViewController我有一些文本框。当用户点击提交UIButton时,我正在向返回XML文件的Web服务进行AFNetworking调用。

问题

我使用StoryBoard界面将按钮连接到UITableViewController。最初这很好用,因为我在UITableViewController内有了Web服务调用的代码。问题是,如果Web服务没有返回任何内容,我会得到一个空白UITableView。因此,当按下按钮时,我将Web服务调用移动到要调用的UIViewController。 OOPS!我进行了Web服务调用,并且在Web服务返回自prepareForSegue以来的数据之前调用了Asynchronous

我的问题

  • 在使用故事板时从Web服务获取数据的最佳方法是什么。我应该在UITableViewController中进行调用,如果没有数据或从服务返回错误,则返回UIViewController。如果是这样,我该如何回来。我已经尝试了self.navigationController popViewController但它在控制台中发出警告,删除视图控制器会使堆栈陷入困境。
  • 有没有办法可以控制何时调用segue,只有在我从Web服务返回数据后才能控制它?

1 个答案:

答案 0 :(得分:2)

逐步发布回答以帮助其他可能需要帮助的人:

Connect the two ViewControllers in Storyboard which will create a segue.

您只需选择第一个视图控制器(确保使用蓝线突出显示viewController,并且您没有像图像视图或navigationItem那样选择。然后按住CTRL并单击目标视图控制器(您想要的位置)过渡到)。connecting two scenes

中间的圆圈称为segue。如果您点击它并转到右侧的属性面板,您会看到:your segue attributes panel

在标识符中输入您要调用此转换的名称:例如myNewPage。

每当您准备好调用下一个场景时。使用此委托方法将数据从一个控制器传递到另一个控制器或执行任何特殊操作:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{

    NameOfDestinationController *dataViewController;
    dataViewController = segue.destinationViewController;
    if ([segue.identifier isEqualToString:@"nameOfYourSegueIdentifier"]) {

        dataViewController.variable1 = self.variable1;
        ...
    }
}

然后在我的情况下,我需要在AFNetworking网络服务电话取得成功后触发segue。所以在Success块中我添加了这一行:

 [self performSegueWithIdentifier:@"nameOfYourSegueIdentifier" sender:self];

现在完美无缺!!!