2011-01-31 18 views
0

インターネット上のファイルの内容を取得する方法は?たとえば、私はNSStringにrssフィードのコンテンツをhttp://news.tut.by/rss/index.rssから取得したいと考えています。どうしたらいいですか?私はiOS SDKクラスだけを使用したい:NSURLConnection、NSURLRequest等 P.S.インターネット上のファイルの内容を取得するには?

#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 

が、それは動作しません:私は、このようなクラスを見ました。

+1

「定義 "が、それは動作しません。" これは私ができる変更した後も – KevinDTimm

答えて

2

接続のロードが完了するまで、すべて正しく機能しています。そこでは、何かをする前にデータを公開しています。デリゲートクラスで、NSString変数を作成します(これはおそらく既にあります)。その後、connectionDidFinishLoading内部で、それを解放する前に文字列に変換します

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

グッドラック!

+0

をconnectionDidFinishLoading前に呼び出されるという理由だけでファイルの内容を受け取る。私はそうするhttp://pastie.org/1514999 –

+0

リンクしたコードはURLを呼び出すだけです。 'connectionDidFinishLoading'メソッドを修正しましたか? – MystikSpiral

+0

ええ、私はそれをやった。しかし、デバッガは "私にこのメソッドは実行されません(私はこの関数でブレークポイントを設定する)"と言った。 –

0

私が使用して問題があった:

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]; 

をそれはクイックモードですが、あなたは、サーバーの応答に関する任意のコントロールを持っていません。

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

1

変更

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

機能didReceiveResponseは

+0

問題が何であったのか、解決した理由を説明した方が良いでしょう。 – tolgamorf

関連する問題