如何在iOS中检索选项卡栏控制器的子视图并将数据传递给子视图?
我的应用程序依赖于一些需要远程提取的必备数据。我的tabbarcontroller的几个子视图控制器需要检索到的数据。我想将检索到的数据传递给这些视图控制器属性 我知道我可以做到以下几点:如何在iOS中检索选项卡栏控制器的子视图并将数据传递给子视图?,ios,cocoa-touch,cocoa,uitabbarcontroller,appdelegate,Ios,Cocoa Touch,Cocoa,Uitabbarcontroller,Appdelegate,我的应用程序依赖于一些需要远程提取的必备数据。我的tabbarcontroller的几个子视图控制器需要检索到的数据。我想将检索到的数据传递给这些视图控制器属性 我知道我可以做到以下几点: UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController; UINavigationController *navigationController = [tabBa
UITabBarController *tabBarController =
(UITabBarController *)self.window.rootViewController;
UINavigationController *navigationController =
[tabBarController viewControllers][0];
MyViewController *myViewController =[navigationController viewControllers][0];
myViewController.prop = myVal;
我的问题是如何在网络呼叫延迟的情况下处理这个问题。如果我同步执行此操作,它将阻塞用户。如果以异步方式传递数据,我不知道在应用程序委托中执行此操作是否会考虑延迟
我如何执行此工作流
是否有一种iOS最佳实践方法来完成此用例?您可以安排在下载数据时获得回调。当你得到它时,你(在主线程上)做你想做的任何事情。例如,在我的应用程序启动时,我是如何下载和解析RSS提要的:
- (void)doRefresh:(id)sender {
FeedFetcher* ff = [FeedFetcher new];
ff.delegate = self;
[ff downloadAndParseRSS];
}
现在我们正在后台线程中下载和解析,因此用户不会被阻止。当一切结束时,我是代表,因此我得到回调:
- (void) downloadAndParseRSSSucceeded:(BOOL) ok
receivedData:(NSMutableData*) receivedData
parsedData:(FPFeed*) parsedData
error:(NSError*)err {
// ... get onto main thread, do something with the data
}
若“处理数据”涉及到获取对另一个视图控制器的引用并向其传递一些数据,那个么很好,并没有问题
例如,如果您使用内置的NSURLSession来执行“网络调用”,那么所有这些都可以通过可爱的代理回调(可以在主线程上)完美地协调处理
我的问题是如何在网络呼叫延迟的情况下处理这个问题。如果我同步执行此操作,它将阻塞用户
处理这些事情的一个好方法是确保您有一个明确定义的数据模型,并且所有需要访问相关数据的视图控制器都有一个对该模型的引用。然后,您可以让后台任务请求数据,并在新数据到来时更新模型。更新模型时,发布通知,告知所有感兴趣的对象(在本例中为视图控制器)模型已更改
为了使事情更加自动化,每个视图控制器都可以用来观察它所关心的模型部分,这样,只有当影响它的事情发生变化时,它才会得到通知。您不会“异步传递数据”。您执行网络调用,异步检索信息,通知代码,如果需要将其传递给其他人,则在主线程上执行。