0

我有一个包含项目列表的 tableView。当做出选择时,一个新的视图控制器被推送到 tableView 的 navigationController viewController 堆栈上。

我的问题是:与推送视图控制器关联的视图层次结构中的一个视图需要先从网络获取数据,然后才能呈现其内容。这种获取是通过 [NSURLRequest requestWithURL: ...] 异步完成的。将数据传递给需要它的视图并让该视图调用它的重载 drawRect 方法的正确方法是什么?目前,我这样做:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {


    [_connection release];
    _connection = nil;

    [self performSelectorOnMainThread:@selector(GetDataFromCloudAndCreateView)
                        withObject:nil 
                     waitUntilDone:NO];


}

方法 GetDataFromCloudAndCreateView 从数据中实例化视图。不幸的是,没有渲染任何内容。我试过 [myView setNeedsDisplay] 但没有效果。

有人可以画出正确的方法吗?谢谢。

4

1 回答 1

1

我过去在这种情况下所做的是UIViewControllerconnectionDidFinishLoading:方法中创建新的,然后推送它。像这样:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    [_connection release];
    _connection = nil;

    // Code to stop a loading indicator of some kind

    UIViewController *newView = [[SomeViewController alloc] initWithData:fetchedData];
    [self.navigationController pushViewController:newView animated:YES];
}

新控制器上的initWithData:方法根据我传递给它的数据处理它需要的任何实例变量,然后当视图加载时,它将根据这些变量绘制视图。

希望这能回答你的问题。

于 2009-09-30T23:33:10.520 回答