Xcode取消ViewDidAppear

时间:2014-05-11 20:26:32

标签: ios objective-c

是否有人知道是否可以取消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;
    }
}

提前致谢。 :)

5 个答案:

答案 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;
            });
        }
    });
}

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