Как получить содержимое файла в Интернете? - PullRequest
0 голосов
/ 31 января 2011

Как получить содержимое файла в интернете?Например, я хочу получить в NSString содержимое RSS-канала от http://news.tut.by/rss/index.rss.Как мне это сделать?Я хочу использовать только классы iOS SDK: NSURLConnection, NSURLRequest и т. Д. PS Я видел такой класс:

#import <Foundation/Foundation.h>


@interface RssDownloader : NSObject {
 NSURLConnection * conn;
 NSMutableData * receivedData;
}

@property(nonatomic, retain) NSURLConnection * conn;
@property(nonatomic, retain) NSMutableData * receivedData;

- (void)downloadUrlContent : (NSURL *)url;
@end




@implementation RssDownloader

@synthesize receivedData, conn;

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
 [receivedData release];
 receivedData = nil;
}

- (void) connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
 [receivedData appendData:data];
}

- (void) connection:(NSURLConnection *)connection didFailWithError:(NSError *)error {
 [connection release];
 [receivedData release];
}

- (void) connectionDidFinishLoading:(NSURLConnection *)connection {
 [connection release];
 [receivedData release];
}

- (void) downloadUrlContent:(NSURL *)url {
 NSURLRequest * urlRequest = [[NSURLRequest alloc] initWithURL:url 
               cachePolicy:NSURLRequestUseProtocolCachePolicy 
                  timeoutInterval:60.0];
 conn = [[NSURLConnection alloc] initWithRequest:urlRequest delegate:self startImmediately:YES];
 if (conn) {
  receivedData = [[NSMutableData data] retain];
 }
}

- (void)dealloc {
 [conn release];
 [receivedData release];
}
@end

, но он не работает.

Ответы [ 3 ]

2 голосов
/ 31 января 2011

Вы все делаете правильно вплоть до завершения загрузки соединения. Там вы выпускаете данные, прежде чем что-то делать с ними. В вашем классе делегата создайте переменную NSString (она, вероятно, уже есть). Затем внутри connectionDidFinishLoading преобразуйте его в строку перед тем, как выпустить:

if(receivedData != nil){
   NSString *content = [NSString stringWithUTF8String:[receivedData bytes]];
   [receivedData release];
} 

Удачи!

1 голос
/ 03 июля 2013

изменение

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
   [receivedData release];
   receivedData = nil;
}

до

- (void) connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
}

только потому, что функция didReceiveResponse будет вызываться перед connectionDidFinishLoading

0 голосов
/ 01 октября 2012

У меня возникла проблема при использовании:

if(receivedData != nil){
   NSString *content = [NSString stringWithUTF8String:[receivedData bytes]];
   [receivedData release];
}

Проблема была в поврежденной строке из моего файла .json.Я использую:

[[NSString alloc] initWithData:receivedData encoding:NSUTF8StringEncoding]

Существует быстрый режим для чтения удаленного файла:

NSString *file = [[NSString alloc] initWithContentsOfURL:[NSURL URLWithString:<your url here>] encoding:NSUTF8StringEncoding error:nil];

Это быстрый режим, но вы не можете управлять серверомответ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...