Как заставить 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
}
}];