Как заставить viewDidAppear загружаться после того, как представление появляется в iOS?

Я пытаюсь получить ярлык для загрузки текста с 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 ответа

Решение

Никогда не вызывайте сетевые запросы и все, что не мгновенно, в главном потоке, потому что оно заморозит ваше приложение. Посмотрите на этот ответ и используйте его для сетевого запроса вместо stringWithContentsOfURL,

Это, вероятно, медленно, потому что сетевой запрос требует времени. Попробуйте загрузить свой текст, прежде чем открыть свой контроллер представления. Если это ваш начальный контроллер представления, сделайте это в App Delegate.

Также при звонке viewDidAppear ты должен позвонить супер.

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

    // Your code...
}

viewDidLoad будет запускаться только один раз при запуске приложения, viewDidAppear вызывается каждый раз, когда ваш вид появляется на экране.

Вызовите [super viewDidAppear:animated]; Если вы хотите показать строку URL только в lable

-(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
    }
}];
Другие вопросы по тегам