2012-05-29 23 views
1

我开发了一个iOS 5应用程序,它从一个网址提供一个饲料,并显示在一个tableview中的帖子。我有一个视图控制器,用于加载表格单元格中的帖子。这一切都完美。IOS 5显示SVProgressHUD时加载饲料在单独的线程不起作用

但是,我想使用SVProgressHUD来显示饲料正在加载在一个单独的线程。

所以在我-(void)viewDidLoad方法,我有以下:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [SVProgressHUD showInView:self.view status:@"loading.." networkIndicator:YES]; 
    dispatch_async(kBgQueue, ^{NSData* data = [NSData dataWithContentsOfURL: latestFeedURL]; 
    [self performSelectorOnMainThread:@selector(fetchedData:) withObject:data waitUntilDone:YES];}); 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(foregroundRefresh:) name:UIApplicationWillEnterForegroundNotification object:nil]; 

    self.pull = [[PullToRefreshView alloc] initWithScrollView:(UIScrollView *) self.feedTableView]; 
    [self.pull setDelegate:self]; 
    [self.feedTableView addSubview:self.pull]; 

    self.title = @"Latest"; 
} 

- (void)fetchedData:(NSData *)responseData { 
    //parse out the json data 
    NSError* error; 
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error]; 

    NSMutableArray* latestFeed = [json objectForKey:@"posts"]; //2 

    self.feedUpLoads = latestFeed; 
    NSLog(@"objects: %@", latestFeed); //3 
    [self.feedTableView reloadData]; 
    [SVProgressHUD dismiss]; 
} 

这一切工作正常,即时得到它在后台线程加载的数据和我的表显示与所需的全部细节的职位。我遇到的问题是SVProgressHUD根本没有显示。即使我将[SVProgressHUD showInView行放在fetchData方法中,它仍然不显示。 (顺便说一句,我知道SVProgressHUD代码的作品,因为我实际上可以让它显示在viewWillAppear方法中的例子

我猜测它不工作, ?但是,如果这就是我应该在哪里把它使其显示而进料被调用,我应该在哪里删除它的情况?

任何帮助表示赞赏!在此先感谢!

+0

实际上虚惊一场,上面的代码确实有效。问题是我很快就得到了结果,所以我没有看到加载条。在我的服务器延迟几秒钟帮助我的测试,我可以确认进度栏实际显示和正确删除。 – user1423382

+1

请注意,您应该更新到最新版本的SVProgressHUD。 'showInView:'方法早已被弃用! – samvermette

回答

4

为别人有类似的问题,这也可能发生,因为你有一个长循环或一段代码需要很长时间来执行。如果发生这种情况,你的进度条不会显示,直到后循环,这种方式击败了目的。

要解决这个问题就需要你这样的:

  • (无效)performSelectorInBackground:(SEL)aSelector withObject:(ID)ARG

基本上你的代码会是这个样子:

- (IBAction)submitPost:(id)sender { 
    //now we show the loading bar and submit the comment 
    [SVProgressHUD showWithStatus:@"Submitting post" maskType:SVProgressHUDMaskTypeGradient]; 
    SEL aSelector = @selector(submitDataOfPost); 
    [self performSelectorInBackground:aSelector withObject:sender]; 
} 

这将基本加载进度条,并在后台线程,你要执行的方法将被调用。这可以确保在执行代码的同时更新UI(显示进度hud)。