如何在 iOS 中出现视图后加载 viewDidAppear?
How to make viewDidAppear load after view appears in 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;
}
调用[超级viewDidAppear:animated];
如果你只想在 lable
中显示 url 字符串
-(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
}
}];
永远不要在主线程上调用网络请求和任何非即时请求,因为它会冻结您的应用程序。
查看 this answer 并将其用于网络请求而不是 stringWithContentsOfURL
。
可能是因为网络请求需要时间,所以速度很慢。在打开视图控制器之前尝试下载文本。如果这是您的初始视图控制器,请在 App Delegate 中执行。
另外当调用 viewDidAppear
时你必须调用 super.
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// Your code...
}
viewDidLoad
只会在您的应用程序启动时 运行 一次,每次您的视图出现在屏幕上时都会调用 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;
}
调用[超级viewDidAppear:animated]; 如果你只想在 lable
中显示 url 字符串-(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
}
}];
永远不要在主线程上调用网络请求和任何非即时请求,因为它会冻结您的应用程序。
查看 this answer 并将其用于网络请求而不是 stringWithContentsOfURL
。
可能是因为网络请求需要时间,所以速度很慢。在打开视图控制器之前尝试下载文本。如果这是您的初始视图控制器,请在 App Delegate 中执行。
另外当调用 viewDidAppear
时你必须调用 super.
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
// Your code...
}
viewDidLoad
只会在您的应用程序启动时 运行 一次,每次您的视图出现在屏幕上时都会调用 viewDidAppear
。