2014-02-22 6 views
7


Wie kann ich den Fortschritt eines AFHTTPRequest erhalten? Ich habe versucht, überall im Netz zu suchen.
Ich verwende:AFNetworking 2.0 HTTP-POST-Fortschritt

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    NSDictionary *params = @{@"gameId" : datas[0], @"p1": datas[1], @"p2":datas[2], @"turn":datas[3] }; 
    manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
    manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
    [manager POST:@"http://localhost/thepath/isprivate/thefile.php" 
     parameters:params success:^(AFHTTPRequestOperation *operation, id responseObject) { 

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    }]; 

Gibt es wie, eine Eigenschaft oder Methode, die ich den Fortschritt einer AFNetworking 2.0 HTTP POST zugreifen kann?

+2

hallo diese Antwort überprüfen http://stackoverflow.com/a/20543730/1228669 – prasad

Antwort

1

können Sie folgende Methode verwenden

- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request 
             fromData:(NSData *)bodyData 
             progress:(NSProgress * __autoreleasing *)progress 
           completionHandler:(void (^)(NSURLResponse *response, id responseObject, NSError *error))completionHandler 

von AFHTTPSessionManager Klasse.

UPDATE:

Normalerweise werden Sie bevorzugen KVO verwenden Upload-Werte zu erhalten. So etwas wie folgt zu verwenden:

static void * kDGProgressChanged = &kDGProgressChanged; 

... 

[progress addObserver:self 
      forKeyPath:@"fractionCompleted" 
       options:NSKeyValueObservingOptionNew 
       context:kDGProgressChanged]; 

... 

- (void)observeValueForKeyPath:(NSString *)keyPath 
         ofObject:(id)object 
         change:(__unused NSDictionary *)change 
         context:(void *)context 
{ 
    if (kDGProgressChanged == context) { 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [self updateProgressInfo]; 
     }); 
    } 
} 
+0

ich diese Methode verwendet, aber der Fortschritt nicht genannt. Die Upload-Aktion wurde erfolgreich durchgeführt, die Datei wurde hochgeladen, aber der Fortschritt wurde nicht verfolgt, obwohl ich KVO zur Überwachung verwendet habe. Was geschieht? – lenhhoxung

+0

@lenhhoxung Bitte überprüfen Sie mein Update für die Antwort. – Avt

19

Try this:

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
NSDictionary *params = @{@"gameId" : datas[0], @"p1": datas[1], @"p2":datas[2], @"turn":datas[3] }; 
manager.requestSerializer = [AFHTTPRequestSerializer serializer]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 

NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] requestWithMethod:@"POST" URLString:@"http://localhost/thepath/isprivate/thefile.php" parameters:params error:&error]; 

AFHTTPRequestOperation *requestOperation = [manager HTTPRequestOperationWithRequest:request success:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"operation success: %@\n %@", operation, responseObject); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 

[requestOperation setUploadProgressBlock:^(NSUInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) { 
    double percentDone = (double)totalBytesWritten/(double)totalBytesExpectedToWrite; 
    NSLog(@"progress updated(percentDone) : %f", percentDone); 
}]; 
[requestOperation start]; 

Hoffnung, das hilft.

+1

Danke, aber Avt antwortete frühestens. +1 für dich und danke. – DHShah01

10

Der kürzeste Weg Weg, dies zu implementieren ist

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    AFHTTPRequestOperation *requestOperation = [manager POST:@"/service/user/authenticate" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) { 
     //Your Business Operation. 
     NSLog(@"operation success: %@\n %@", operation, responseObject); 
    } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
     NSLog(@"Error: %@", error); 
    }]; 
//Here is the upload progress 
[requestOperation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { 
      double percentDone = (double)totalBytesWritten/(double)totalBytesExpectedToWrite; 
      //Upload Progress bar here 
      NSLog(@"progress updated(percentDone) : %f", percentDone); 
     }]; 
+0

Es sieht so aus, als ob Sie den Fortschrittsblock innerhalb des Erfolgsblocks setzen. Funktioniert das wirklich? Ich würde denken, dass das nutzlos wäre, dass Sie den Fortschrittsblock im Grunde einstellen, nachdem er erfolgreich abgeschlossen wurde. –

+0

@SterlingChristensen Danke für Ihre Benachrichtigung. Der Code wurde entsprechend bearbeitet. Danke, –

+0

Dies ist ein kürzerer Weg mit AFN 2.0, danke – Kuba

Verwandte Themen