iOS7编程 - 如何让视图控制器等待数据加载?

时间:2014-03-27 21:02:59

标签: ios objective-c cocoa-touch

我在Xcode 5.1上运行。我正在开展一个学校项目,我们需要在application:didFinishLaunchingWithOptions:中加载推文,之后我们需要在视图控制器上显示获取的数据。

我正在使用界面构建器,因为我觉得它更简单,所以要回答我的问题,请记住我正在寻找带有界面构建器的解决方案。

我的问题是: application:didFinishLaunchingWithOptions: AppDelegate中的推文加载函数在一个单独的线程中运行。我知道如果您以编程方式在AppDelegate中推送视图控制器,那么您可以在初始化视图控制器之前等待加载推文。但是,由于我使用的是界面构建器,因此即使在推文加载功能完成之前,视图控制器也始终在启动时初始化。因此,我正在为AppDelegate中的函数寻找一种方法来通知故事板创建的视图控制器的实例,以便在下载所有必需的推文后重新加载其数据。

简单地说: 如何从AppDelegate访问界面构建器创建的任何视图控制器的实例?这是正确的做法吗?

我搜索过很多解决方案,但所有这些解决方案都涉及创建一个新实例,这个实例与已在运行时创建的实例不同。

2 个答案:

答案 0 :(得分:0)

如果您的UI元素已正确绑定到模型,则模型的更改应自动反映在视图中。

我不确定您正在使用的UI界面元素。我假设您有一个UITableViewController显示您的推文,并且您正在使用您的appDelegate作为UITVCDelegate,以便为其提供有关其UITableView中每个单元格的单元格数,尺寸和数据的信息。最后,您希望在完成提取推文后重新加载数据。

最简单的方法是在tableView上调用[tableView reloadData](您可以从UITVC访问它)。但是,这只是基于我对您使用UITableView显示推文的假设是正确的。

干杯!

答案 1 :(得分:0)

我认为您正在寻找的是以下内容:

  • 您希望在应用程序开始时加载异步数据
  • 在有数据要显示之前,您不希望用户能够与应用程序进行交互。

我会为此做的是:

不要在完成启动中获取数据 使用'rootViewController`属性获取viewcontroller的实例:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // Override point for customization after application launch.

    MYVIEWCONTROLLER *controller = (MY_ROOT_VIEW_CONTROLLER *)self.window.rootViewController;
    [controller triggerFetch];
    ...
    return YES;
} 

triggerFetch中,您将创建向主视图添加UIActivityIndicator或进度条,并为fetch函数添加回调。提取完成后,您将删除加载视图并显示提取的内容。