你们中有人知道是否可以取消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;
}
}提前谢谢。:)
发布于 2014-05-12 02:38:20
永远不要用网络调用阻止UI线程。读关于GCD的文章。
在ViewDidLoad中这样做,当modals被取消时,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;
});
}
});
}同时,变量名也不应该大写。使用骆驼符号
发布于 2014-05-11 20:36:26
虽然从技术上说,您可以从viewDidAppear内部返回,但这可能有点疯狂,您不应该首先这么做。如果这种方法中的某些东西正在减慢速度,那么它就不是做它的合适地方。
例如,如果要从某个远程源(例如web服务器)加载概要文件图片,那么很可能会从viewDidAppear内部触发一些内容,但是获取数据的过程应该异步进行。
与你的问题无关,但无论如何都很重要:你错过了超级电话:[super viewDidAppear:animated];
发布于 2014-05-11 20:37:17
记得打电话:
[super viewDidAppear:animated]否则,就不会在类viewDidAppear上调用UIViewController方法。
在扩展类时,这是非常重要的。记得调用Super以维护您正在扩展的类的行为。
https://stackoverflow.com/questions/23597534
复制相似问题