我可以加载多个UIViewControllers,每个UIViewControl都启动自己的NSURLConnections吗?

时间:2010-03-18 13:54:05

标签: iphone xcode uiviewcontroller nsurlconnection

我的Rootviewcontroller使用NSURLConnection从服务器获取数据,然后根据这些数据加载一堆较小的UIViewControllers(如7),每个UIViewControllers也使用自己的NSURLConnection从服务器获取更具体的数据。但是,问题是,只有RooTViewController接收来自:

的回调
- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection

其他UIViewControllers永远不会得到回调......

2 个答案:

答案 0 :(得分:2)

您应该假设当时只有一个视图控制器处于活动状态。因此,如果您希望其他视图控制器能够正常工作,即使它们在屏幕上不可见,那么您应该将该逻辑移动到执行所有网络通信的单个对象中。视图控制器出现时,只会向该对象询问数据。

对于iPhone来说,让非活动视图控制器在后台执行操作是一个非常糟糕的设计。他们唯一要做的就是管理您当前在屏幕上看到的视图。

答案 1 :(得分:0)

@ St3fan对于UIViewController的良好模式是正确的。许多开发人员都被认为他的UIViewController总是有一个非零视图(它没有)....即便如此,我还会在这里讨论可能出错的地方。

有两种可能的原因:您没有将UIViewControllers设置为NSURLConnections的代理,或者您实际上并未启动NSURLConnections。后者最可能的原因是你正在使用NIB并期望它们在程序开始时加载,而它们实际上只在需要时加载。

正如@deanWombourne所说,你可以拥有你想要的所有NSURLConnections(**)。在调试器中遍历您的代码。确保你没有发送消息给零。当“没有任何反应”时,它几乎总意味着你正在向nil发送消息。

(**)不要对iPhone上的连接感到疯狂。创建网络连接的成本很高(包括时间和电池)。如果您可以通过单个连接获得所需的所有数据,那么这样做有一些优势。这并不意味着你应该向后弯腰以避免连接;小心让他们失去控制。