В настоящее время я пытаюсь загрузить некоторые файлы с помощью AFNetworking, для относительно небольших файлов это, кажется, работает, но я пытаюсь загрузить файл немного большего размера (17 МБ), и он просто падает без каких-либо ошибок.
URL-адрес ссылается на локальный файл: http://test.local/wp-content/uploads/2012/07/test.pdf (я запускаю его в симуляторе, так что это доступно)
Единственный вывод, который я получаю, находится в блоке выполнения
прогресс: 0.009022
Когда я проверяю файловую систему, оказывается, что файл есть, но всего несколько килобайт.
Это известная ошибка с AFNetworking, или может я просто что-то не так делаю.
- (void)downloadIssue:(Issue *)issue
{
NSString *fileName = [issue.pdf lastPathComponent];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:fileName];
NSURL *url = [NSURL URLWithString:issue.pdf];
AFHTTPClient *httpClient = [[[AFHTTPClient alloc] initWithBaseURL:url] autorelease];
NSURLRequest *request = [httpClient requestWithMethod:@"GET" path:issue.pdf parameters:nil];
AFURLConnectionOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request];
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:filePath append:NO];
[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"PDF DOWNLOAD COMPLETE");
issue.pdf_location = filePath;
// send out a notification with the issue
[[NSNotificationCenter defaultCenter] postNotificationName:@"PDF_DOWNLOAD_COMPLETE" object:nil userInfo:[NSDictionary dictionaryWithObject:issue forKey:@"issue"]];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"PDF DOWNLOAD FAILED");
// send out a notification with the issue
[[NSNotificationCenter defaultCenter] postNotificationName:@"PDF_DOWNLOAD_FAILED" object:nil userInfo:[NSDictionary dictionaryWithObject:issue forKey:@"issue"]];
}];
[operation setDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
float progress = (float)totalBytesRead / totalBytesExpectedToRead;
NSLog(@"progress: %f", progress);
[[NSNotificationCenter defaultCenter] postNotificationName:@"PDF_DOWNLOAD_PROGRESS" object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys: issue, @"issue", progress, @"progress", nil]];
}];
[_queue addOperation:operation];
}
EXC_BAD_ACCESS
? вы пытались включить объект зомби. - person bitmapdata.com   schedule 17.08.2012AFHTTPClient
и использование его только для созданияNSURLRequest
для вас — это слишком много.AFHTTPClient
подразумевается как клиент API REST, один экземпляр используется всеми вызовами. - person rckoenes   schedule 17.08.2012postNotification
вsetDownloadPrgoressBlock
. и повторил попытку :). все еще не работает? - person bitmapdata.com   schedule 17.08.2012AFHTTPClient
, но он имеет тот же эффект, маленькие файлы можно загружать, большие просто вылетают - person woutr_be   schedule 17.08.2012AFHTTPClient
не имело никакого отношения к сбою. Просто то, как вы его используете, слишком убийственно.AFHTTPClient
имеет такие методы, как:–getPath:parameters:success:failure:
,– postPath:parameters:success:failure:
,–putPath:parameters:success:failure:
и–deletePath:parameters:success:failure:
, которые избавляют от необходимости создавать собственную операцию и помещать ее в очередь. Все сделаноAFHTTPClient
- person rckoenes   schedule 17.08.2012