首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Xcode取消ViewDidAppear

Xcode取消ViewDidAppear
EN

Stack Overflow用户
提问于 2014-05-11 20:26:31
回答 5查看 551关注 0票数 0

你们中有人知道是否可以取消viewDidAppear

当我加载一个新视图时,viewDidAppear正在加载,在这段时间里,我不能像切换视图那样进行操作。

以下是viewDidAppear代码:

代码语言:javascript
复制
- (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;
    }
}

提前谢谢。:)

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-05-12 02:38:20

永远不要用网络调用阻止UI线程。读关于GCD的文章。

在ViewDidLoad中这样做,当modals被取消时,viewDidAppear也会被调用,您不希望每次模式被取消时都下载图像

代码语言:javascript
复制
- (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;
            });
        }
    });
}

同时,变量名也不应该大写。使用骆驼符号

票数 0
EN

Stack Overflow用户

发布于 2014-05-11 20:36:26

虽然从技术上说,您可以从viewDidAppear内部返回,但这可能有点疯狂,您不应该首先这么做。如果这种方法中的某些东西正在减慢速度,那么它就不是做它的合适地方。

例如,如果要从某个远程源(例如web服务器)加载概要文件图片,那么很可能会从viewDidAppear内部触发一些内容,但是获取数据的过程应该异步进行。

与你的问题无关,但无论如何都很重要:你错过了超级电话:[super viewDidAppear:animated];

票数 2
EN

Stack Overflow用户

发布于 2014-05-11 20:37:17

记得打电话:

代码语言:javascript
复制
[super viewDidAppear:animated]

否则,就不会在类viewDidAppear上调用UIViewController方法。

在扩展类时,这是非常重要的。记得调用Super以维护您正在扩展的类的行为。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23597534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档