是否有人知道是否可以取消viewDidAppear
?
当我加载新视图时,viewDidAppear
正在加载,在那段时间我无法切换视图。
这里是viewDidAppear
代码:
- (void)viewDidAppear:(BOOL)animated{
NSURL * imageURL = [NSURL URLWithString:[NSString stringWithFormat:@"Url",Username]];
NSData * imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage * image = [UIImage imageWithData:imageData];
if (image) {
UsersProfilpic.image = image;
}
imageURL = [NSURL URLWithString:[NSString stringWithFormat:@"Url",FriendsName]];
imageData = [NSData dataWithContentsOfURL:imageURL];
image = [UIImage imageWithData:imageData];
if (image) {
FriendsProfilpic.image = image;
}
}
提前致谢。 :)
答案 0 :(得分:2)
虽然从技术上讲你可以从viewDidAppear中返回,但这有点疯狂,你首先不应该这样做。如果该方法中的某些东西减慢了速度,那么它就不适合这样做。
例如,如果您要从某些远程源(例如Web服务器)加载配置文件图片,那么您可能很好地从viewDidAppear中触发,但是获取数据应该是异步发生的。
与你的问题无关,但无论如何都很重要:你错过了对super的调用:[super viewDidAppear:animated];
答案 1 :(得分:2)
请记得致电:
[super viewDidAppear:animated]
否则您不会在课程viewDidAppear
上调用UIViewController
方法。
扩展课程时非常重要。 请记得调用super来维护您正在扩展的类的行为。
答案 2 :(得分:0)
您可以只包含if(boolean)中包含的所有代码,然后根据您是否要在viewDidAppear中执行代码来设置此布尔值。即。
- (void)viewDidAppear:(BOOL)animated{
if (someBoolean == true) {
NSURL * imageURL = [NSURL URLWithString:[NSString stringWithFormat:@"Url",Username]];
NSData * imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage * image = [UIImage imageWithData:imageData];
if (image) {
UsersProfilpic.image = image;
}
imageURL = [NSURL URLWithString:[NSString stringWithFormat:@"Url",FriendsName]];
imageData = [NSData dataWithContentsOfURL:imageURL];
image = [UIImage imageWithData:imageData];
if (image) {
FriendsProfilpic.image = image;
}
}
}
答案 3 :(得分:0)
我不确定你到底想要什么。但是,如果您想摆脱“正在加载” viewDidAppear
,那么只需将“viewDidAppear
代码”放入“{{ 1}}方法“。 “viewDidLoad
方法”只有一次来到那个特定的viewDidLoad
,但另一方面“viewController
方法”当你来到viewDidAppear
时,每次都会打电话。所以你的代码就像这样:
viewController
您可以查看“This Discussion”。希望它有所帮助。
答案 4 :(得分:0)
您永远不应该通过网络呼叫阻止UI线程。 阅读GCD。
在ViewDidLoad中执行此操作,当模态被解除时,viewDidAppear也会被调用,每次模态被解除时,您都不想下载图像
- (void)viewDidLoad
{
[super viewDidLoad];
// Call it in global queue
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
NSURL * imageURL = [NSURL URLWithString:[NSString stringWithFormat:@"Url",Username]];
NSData * imageData = [NSData dataWithContentsOfURL:imageURL];
UIImage * image = [UIImage imageWithData:imageData];
if (image) {
// Update image on ui thread
dispatch_async(dispatch_get_main_queue(), ^{
UsersProfilpic.image = image;
});
}
});
// Call it in global queue
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
imageURL = [NSURL URLWithString:[NSString stringWithFormat:@"Url",FriendsName]];
imageData = [NSData dataWithContentsOfURL:imageURL];
image = [UIImage imageWithData:imageData];
if (image) {
// Update image on ui thread
dispatch_async(dispatch_get_main_queue(), ^{
FriendsProfilpic.image = image;
});
}
});
}
哦,变量名也不应该大写。使用骆驼符号