我的Rootviewcontroller使用NSURLConnection从服务器获取数据,然后根据这些数据加载一堆较小的UIViewControllers(如7),每个UIViewControllers也使用自己的NSURLConnection从服务器获取更具体的数据。但是,问题是,只有RooTViewController接收来自:
的回调- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection
其他UIViewControllers永远不会得到回调......
答案 0 :(得分:2)
您应该假设当时只有一个视图控制器处于活动状态。因此,如果您希望其他视图控制器能够正常工作,即使它们在屏幕上不可见,那么您应该将该逻辑移动到执行所有网络通信的单个对象中。视图控制器出现时,只会向该对象询问数据。
对于iPhone来说,让非活动视图控制器在后台执行操作是一个非常糟糕的设计。他们唯一要做的就是管理您当前在屏幕上看到的视图。
答案 1 :(得分:0)
@ St3fan对于UIViewController的良好模式是正确的。许多开发人员都被认为他的UIViewController总是有一个非零视图(它没有)....即便如此,我还会在这里讨论可能出错的地方。
有两种可能的原因:您没有将UIViewControllers设置为NSURLConnections的代理,或者您实际上并未启动NSURLConnections。后者最可能的原因是你正在使用NIB并期望它们在程序开始时加载,而它们实际上只在需要时加载。
正如@deanWombourne所说,你可以拥有你想要的所有NSURLConnections(**)。在调试器中遍历您的代码。确保你没有发送消息给零。当“没有任何反应”时,它几乎总意味着你正在向nil发送消息。
(**)不要对iPhone上的连接感到疯狂。创建网络连接的成本很高(包括时间和电池)。如果您可以通过单个连接获得所需的所有数据,那么这样做有一些优势。这并不意味着你应该向后弯腰以避免连接;小心让他们失去控制。