我已经实现了一个子视图,当我单击父视图中的按钮时,该子视图应该立即加载。在加载子视图(基本上持有一个activityindicator)之后,该程序应该处理一个方法(从服务器获取数据,因此需要时间)。
但是,我无法做到。
现在发生的是,当我单击父视图上的按钮时,它首先处理该方法,然后才会在屏幕上加载子视图。
为什么会这样?是否有任何特定的函数可以用来在视图加载后加载我的方法?
答案 0 :(得分:2)
我遇到了同样的问题,我使用了NSAutoreleasePool并解决了这个问题。我希望它会对你有所帮助。
- (void)viewDidLoad {
[self performSelectorInBackground:@selector(loadXml) withObject:nil];
}
-(void) loadXml{
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
NSString * path =@"http:www.YOUR_RSS_FEED.com";
[self parseXMLFileAtURL:path]; //(Instead of ViewDidAppear)
[self.tableView performSelectorOnMainThread:@selector(reloadData) withObject:nil waitUntilDone:NO];
[pool drain];
}
感谢。
答案 1 :(得分:0)
一些不同的方法:
如果子视图具有加载图像和执行更复杂的功能而不仅仅是视图的功能,那么一种好的方法是将其转换为ViewController。
在顶级ViewController中使用:
- (void) loadView {
[super loadView];
}
设置显示视图时需要准备的内容。
使用:
-(void) viewDidLoad {
}
进行额外设置。
在您的情况下,听起来好像您需要在loadView方法中添加指标,然后在viewDidLoad方法中开始检索数据。
如果您正在访问Web服务等,请始终在其他线程上执行此操作。 (查看NSOperation以获得实现此目标的简单方法。)