0

我已经实现了一个子视图,当我单击父视图中的按钮时,它应该立即加载。加载子视图(基本上是一个活动指示器)后,程序应该在其中处理一个方法(从服务器获取数据,因此需要时间)。

但是,我无法做到这一点。

现在发生的事情是,当我单击父视图上的按钮时,它首先处理该方法,然后才在屏幕上加载子视图。

为什么会这样?是否有任何特定功能可以让我的方法仅在视图加载后才加载?

4

2 回答 2

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];

   }

谢谢。

于 2010-06-08T11:56:50.773 回答
0

几种不同的方法:

如果子视图具有加载图像和执行比视图更复杂的功能的功能,则一个好的方法是将其改为 ViewController。

在顶部 ViewController 中使用:

- (void) loadView { 
    [super loadView];
}

设置在显示视图时需要准备的东西。

使用:

-(void) viewDidLoad {

}

做额外的设置。

在您的情况下,听起来好像您需要在 loadView 方法中添加指标,然后在 viewDidLoad 方法中开始检索数据。

如果您正在访问 Web 服务等,请始终在不同的线程上执行此操作。(查看 NSOperation 以获得实现这一目标的良好、简单的方法)。

于 2010-06-08T11:57:49.983 回答