Не удалось скачать файл с NSURLRequest
Я просто новичок в разработке IOS. Я пытался вычислить яблочную документацию. Итак, я прочитал эту страницу:
и вот что я сделал:
NSMutableData *testFileType;
// Create the request.
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:urlString]
cachePolicy:NSURLRequestUseProtocolCachePolicy
timeoutInterval:60.0];
// create the connection with the request
// and start loading the data
NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
if (theConnection) {
// Create the NSMutableData to hold the received data.
// receivedData is an instance variable declared elsewhere.
testFileType = [[NSMutableData data] retain];
NSLog(@"the connection is successful");
} else {
// Inform the user that the connection failed.
NSLog(@"the connection is unsuccessful");
}
[testFileType setLength:0];
[testFileType appendData:[NSMutableData data]];
Кто-нибудь может сказать мне, что мне здесь не хватает?
2 ответа
Просто создание NSURLConnection недостаточно. Вам также необходимо реализовать методы делегата didReceiveResponse и didFinishLoading. Без этого соединение загружает файл, но вы никогда не увидите его.
NSURLConnection отправляет didReceiveResponse для каждого перенаправления при получении заголовков. Затем он отправляет didReceiveData с некоторыми байтами файла. Те, которые вам нужно добавить к вашим изменяемым данным. Наконец, вы получаете didFinishLoading, где вы знаете, что вы получили все данные. В случае ошибки вы получаете вместо этого didFailWithError.
Посмотрите документацию по протоколу NSURLConnectionDelegate: https://developer.apple.com/library/mac/ipad/#documentation/Foundation/Reference/NSURLConnectionDelegate_Protocol/Reference/Reference.html.
Вы должны реализовать следующие методы делегата:
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
NSLog(@"Error: %d %@", [error code], [error localizedDescription]);
}
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
responseData = [NSMutableData data];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[responseData appendData:data];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[responseData writeToFile:savePath atomically:YES];
}
здесь responseData и savePath являются переменными экземпляра, объявленными с помощью:
NSMutableData *responseData;
NSString *savePath;
и ваш класс должен соответствовать NSURLConnectionDataDelegate
а также NSURLConnectionDelegate
протоколы.
Чтобы код работал, вы, вероятно, захотите установить savePath на рабочий путь, подобный этому
NSString *savePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"testfile.txt"];
После завершения загрузки вы можете сделать что угодно с файлом на savePath
как хотите.