0

JSON 解析操作をキューに入れ、完全なデータ解析を待つ方法を見つけました。これがコードです。

- (void)LoadParse { // this method is called by a UIButton

    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:5.0];

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        // PARSING SUCCESS CODE
        NSLog(@"operation completed"); <--- END OPERATION
        [self anotherMethod]; <--- CALL METHOD AFTER OPERATION IS FINISHED
    }
    failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON {
        // PARSING FAILURE CODE
    }];

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue addOperation:operation]; <--- START OPERATION

    // I NEED TO SHOW A SORT OF INDICATOR TO ADVERT USER THAT OPERATION ARE STILL LOADING
    // EXAMPLE: [DejalBezelActivityView activityViewForView:self.view withLabel:@"LOADING..."].showNetworkActivityIndicator = YES;

    [queue waitUntilAllOperationsAreFinished];

}

キューは完全に機能します。アプリは解析操作の終了を待ってから、anotherMethodを呼び出します。しかし、まだ読み込み操作があるときに、ユーザーに広告を表示するために一種のactivityViewを表示する必要があります。それは正しい方法ですか?では、すべての操作が完了するまで表示するための activityView コードを配置する正しい場所、またはそのトリックを実行する別の方法はどこにあるのでしょうか? ありがとう!

4

1 に答える 1

1

このコードを使用できます

- (void)LoadParse { // this method is called by a UIButton

    NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:5.0];

    AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
        // PARSING SUCCESS CODE
    }
    failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON {
        // PARSING FAILURE CODE
    }];

    NSOperationQueue *queue = [[NSOperationQueue alloc] init];
    [queue addOperation:operation];

    UIActivityIndicatorView *tempSpinner = [[UIActivityIndicatorView alloc]initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
    [self.view addSubview:tempSpinner]; 
    [tempSpinner startAnimating];

    [queue waitUntilAllOperationsAreFinished];

    [tempSpinner stopAnimating]; 
    //release tempSpinner if not using arc using [tempSpinner release];
    [self anotherMethod];
}
于 2013-02-15T16:58:43.533 に答える