如何在iOS中显示视图后加载viewDidAppear?

时间:2016-08-11 09:42:14

标签: ios xcode viewdidappear

我正在尝试使用标签从URL加载文本,以便可以从服务器更新,而无需更新实际的应用程序。

最初我使用了viewDidLoad方法,但这会加载视图太慢。我读取使用viewDidAppear方法,但是,它以相同的方式加载。我试图找到有关如何使其工作的详细信息的论坛,但找不到我需要的东西。

我也读过有关异步加载的内容,虽然我不熟悉编码,所以我真的不知道我在读什么!

如果有人能在这种情况下让我知道如何解决这个问题,那就太好了。

感谢。

- (void)viewDidLoad {
    [super viewDidLoad];

    // Do any additional setup after loading the view.
}

-(void) viewDidAppear:(BOOL)animated {
    NSURL *urlTermOutlookTitle = [NSURL URLWithString:@"URL that info is coming from here"];
    NSString *TitleLabel = [NSString stringWithContentsOfURL:urlTermOutlookTitle encoding:NSStringEncodingConversionAllowLossy error:nil];
    TermOutlookTitleLabel.text = TitleLabel;
}

2 个答案:

答案 0 :(得分:0)

调用[super viewDidAppear:animated]; 如果您只想在标签中显示网址字符串

-(void) viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    NSURL *urlTermOutlookTitle = [NSURL URLWithString:@"URL that info is coming from here"];
    NSString *TitleLabel = [NSString stringWithContentsOfURL:urlTermOutlookTitle encoding:NSStringEncodingConversionAllowLossy error:nil];
     dispatch_async(dispatch_get_main_queue(), ^{
           TermOutlookTitleLabel.text = TitleLabel;
        }); 

}

您也可以直接从任何其他方法调用委托方法。

[self viewDidAppear:YES]

如果你必须从服务器中收集数据

NSURLRequest * urlRequest = [NSURLRequest requestWithURL:[NSURL URLWithString:@"URL that info is coming from here"]];
[NSURLConnection sendAsynchronousRequest:request
                                   queue:[NSOperationQueue mainQueue]
                       completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
    // optionally update the UI to say 'done'
    if (!error) {
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData: requestHandler options: NSJSONReadingMutableContainers error: &e];
        // update the UI here (and only here to the extent it depends on the json)
        dispatch_async(dispatch_get_main_queue(), ^{
           TermOutlookTitleLabel.text = TitleLabel;
        });  
    } else {
        // update the UI to indicate error
    }
}];

答案 1 :(得分:0)

不要在主线程上调用网络请求和任何不是即时的东西,因为它会冻结你的应用程序。 请查看this answer并将其用于网络请求,而不是stringWithContentsOfURL

由于网络请求需要时间,因此可能很慢。尝试在打开视图控制器之前下载文本。如果这是您的初始视图控制器,请在App Delegate中执行。

同样在致电viewDidAppear时,您必须致电超级。

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];

    // Your code...
}

viewDidLoad只会在您的应用启动时运行一次,每次您的视图出现在屏幕上时都会调用viewDidAppear