2014-09-14 38 views
8

Chcę przesłać pliki do mojego serwera z mojej aplikacji. Poniższy kod działa doskonale, gdy aplikacja jest aktywna. Jeśli naciśnie przycisk strony głównej lub zostanie otwarta inna aplikacja zostanie zatrzymana.Przesyłanie pliku w tle AFNetworking

Aktywowałem pobieranie w tle, ale nadal nie działa.

Praca w tle ma wsparcie w tle, ale nie mogę zrozumieć, w jaki sposób mogę zaimplementować tę funkcję do mojego kodu.

NSString *str=[[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Archive.zip"]; 
NSDictionary *parameters = @{@"foo": @"bar"}; 
    NSURL *filePath = [NSURL fileURLWithPath:str]; 
    AFHTTPRequestSerializer *serializer = [AFHTTPRequestSerializer serializer]; 

    NSData *imageData=[NSData dataWithContentsOfURL:filePath]; 


    NSMutableURLRequest *request = 
    [serializer multipartFormRequestWithMethod:@"POST" URLString:@"http://url" 
            parameters:parameters 
        constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
         [formData appendPartWithFileData:imageData 
                name:@"image" 
               fileName:@"Archive.zip" 
               mimeType:@"application/zip"]; 
        }]; 


    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
    manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
    AFHTTPRequestOperation *operation = 
    [manager HTTPRequestOperationWithRequest:request 
            success:^(AFHTTPRequestOperation *operation, id responseObject) { 
             NSLog(@"Success %@", responseObject); 
            } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
             NSLog(@"Failure %@", error.description); 
            }]; 


    [operation setUploadProgressBlock:^(NSUInteger __unused bytesWritten, 
             long long totalBytesWritten, 
             long long totalBytesExpectedToWrite) { 
     NSLog(@"Wrote %lld/%lld", totalBytesWritten, totalBytesExpectedToWrite); 
    }]; 


    [operation start]; 
+0

udało ci się znaleźć rozwiązanie tego problemu ? –

+0

Z dokumentu NSURLSession jabłka, wsparcie transferu w tle tylko zadania przesyłania i pobierania (bez zadań danych) z URL pliku, Według Twojego kodu wydaje się, że używasz wysyłania NSData. – vnaren001

Odpowiedz

6

Zmiana ta linia

[operation start]; 

do tego

[operation setShouldExecuteAsBackgroundTaskWithExpirationHandler:^{ 
     // Handle iOS shutting you down (possibly make a note of where you 
     // stopped so you can resume later) 
    }]; 


    [manager.operationQueue addOperation:operation]; 

Można spojrzeć na te linki AFHTTPRequestOperation doesn't work after stand by mode i Alternative for enqueueHTTPRequestOperation in AFNetworking 2.0

+5

Zatrzyma się po kilku minutach, jeśli aplikacja nie jest aktywna. – amone

+0

@charty: oznacza, gdy aplikacja jest zawieszona przez iOS? – BaSha