我正在开发一个IOS 5应用程序,该应用程序从网址获取提要并在tableview中显示帖子。我有一个View控制器,可以使用Feed中的帖子加载表格单元格。这一切都很完美。
但是,我希望在单独的帖子中加载Feed时使用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
方法中显示它。
我猜它没有用,因为在我调用它时,视图还没有完全存在?但是,如果是这样的情况我应该调用它以便在调用Feed时显示它,我应该在哪里删除它?
任何帮助表示赞赏!提前谢谢!!
答案 0 :(得分:4)
对于遇到类似问题的其他人来说,这也可能发生,因为你有一个长循环或一段需要很长时间才能执行的代码。如果发生这种情况,您的进度条将不会显示,直到循环之后,这种方式会失败。
要解决此问题,您需要这样:
基本上你的代码看起来像这样:
- (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)。