0

クラスが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すべてのデータを取得する独自のヘルパー クラスを使用しています。データの 1 つがダウンロード[self.delegate passProgress:fetchedItems/20.0f];されると、デリゲートによって呼び出され、LoadViewController次のようになります。

-(void)passProgress:(float)progress {

dispatch_async(dispatch_get_main_queue(), ^{
    [self.progressView setProgress:progress];
    NSLog(@"Updated!");
});
}

しかし問題は、20 個のデータのうち 1 つをダウンロードした後、progressView が更新されないことです。問題はどこだ?

4

1 に答える 1

0

正しいかどうかはわかりませんが、LoadViewControllerからperfromOnMainThread:withObject:waitUntilDone:に変更しましperfromInBackground:withObject:たが、動作します。

于 2012-12-05T12:58:25.587 に答える