我上课LoadViewController
,一开始我称之为:
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
dispatch_async(kBgQueue, ^{
NSData *dataOfURL = [NSData dataWithContentsOfURL:kRSSURL];
[self performSelectorOnMainThread:@selector(fetchedData:) withObject:dataOfURL waitUntilDone:YES];
});
}
kbgQueue
#define kBgQueue dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0)
在主线程上执行fetchedData:
。
- (void)fetchedData:(NSData *)responseData {
XMLParser *parser = [[XMLParser alloc] initWithData:responseData];
parser.delegate = self;
if ([parser parse]) {
// if parsed.
if (!data) {
data = [[NSMutableArray alloc] init];
}
else {
[data removeAllObjects];
}
data = [parser getParsedData];
ViewController *viewController = [self.storyboard instantiateViewControllerWithIdentifier:@"ViewController"];
viewController.array = data;
[self presentViewController:viewController animated:YES completion:^{}];
//[self reloadData];
}
else {
NSLog(@"False.");
}
}
如您所见,我使用自己的XMLParser
帮助程序类,我可以获取所有数据。当下载一个数据时,我会通过委托调用[self.delegate passProgress:fetchedItems/20.0f];
,而LoadViewController
就像这样:
-(void)passProgress:(float)progress {
dispatch_async(dispatch_get_main_queue(), ^{
[self.progressView setProgress:progress];
NSLog(@"Updated!");
});
}
但问题是:在下载一个20个数据项后,progressView没有更新。问题在哪里?
答案 0 :(得分:0)
我不知道它是否正确但我在LoadViewController
从perfromOnMainThread:withObject:waitUntilDone:
更改为perfromInBackground:withObject:
,但它确实有效。