Iphone - UIView没有显示

时间:2010-04-21 09:32:49

标签: iphone activity-indicator

我对UIView有一个奇怪的问题:

我想显示我使用Interface Builder创建的活动指示器视图,以指示长时间运行的活动。

在我的主要viewController的viewDidLoad函数中,我按这样初始化ActivityIndi​​cator视图:

- (void)viewDidLoad {
    [super viewDidLoad];
    appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];        
    load = [[ActivityIndicatorViewController alloc] init];
    ...

当我按下按钮时,它会调用此IBAction:

- (IBAction)LaunchButtonPressed{            
    // Show the Activity indicator view.
    [self.view addSubview:load.view];

    // eavy work 
    [self StartWorking];    

    // Hide the loading view.
    [load.view removeFromSuperview];    
}

在StartWorking函数中,我向Internet服务器请求并解析它返回给我的XML文件。

问题在于,如果我调用我的StartWorking函数,则应用程序不会通过显示活动指示器视图而是使用StartWorking函数启动。 而如果我删除对StartWorking函数的调用,则会显示视图。

有人能够解释我为什么吗? :■

3 个答案:

答案 0 :(得分:2)

您是否尝试在其他线程上调用 StartWorking 方法? 也许它繁重的过程会妨碍其他指令的发生。

查看NSThread类,尤其是 detachNewThreadSelector:toTarget:withObject:方法。

编辑:关于池问题,您需要在StartWorking方法中创建一个池,如果它在另一个线程上调用:

- ( void )StartWorking
{
    NSAutoreleasePool * pool = [ [ NSAutoreleasePool alloc ] init ];

    /* Code here... */

    [ pool release ];
}

答案 1 :(得分:1)

替换: [self.view addSubview:load.view];

用: [self performSelector:@selector(addLoadingSubview) afterDelay:0.1f];

并创建方法: -(void)addLoadingSubview{[self.view addSubview:load.view];}

答案 2 :(得分:0)

好的,我找到了一个基于santoni回答的解决方案:

- (IBAction)LaunchButtonPressed{            
    // Show the Activity indicator view.
    [self performSelector:@selector(ShowActivityIndicatorView) withObject:nil afterDelay:0];

    // eavy work 
    [self performSelector:@selector(StartWorking) withObject:nil afterDelay:2];  

    // Hide the loading view.
    [load.view removeFromSuperview];    
}

在调用eavy函数之前会显示活动指示器视图。

感谢您的回答。