-1

私はIOS開発の初心者です。私はアップルのドキュメントを理解しようとしています。だから私はこのページを読みました:

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html#//apple_ref/doc/uid/20001836-BAJEAIEE

これは私がやったことです:

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

ここで何が欠けているのか誰か教えてもらえますか?

4

2 に答える 2

0

次のデリゲート メソッドを実装する必要があります。

- (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

于 2012-12-18T06:25:26.340 に答える
0

NSURLConnection を作成するだけでは十分ではありません。また、didReceiveResponse および didFinishLoading デリゲート メソッドを実装する必要があります。これらがないと、接続によってファイルがダウンロードされますが、表示されることはありません。

NSURLConnection は、ヘッダーが受信されると、リダイレクトごとに didReceiveResponse を送信します。次に、ファイルのいくつかのバイトを含む didReceiveData を送信します。可変データに追加する必要があるもの。最後に、すべてのデータを取得したことがわかっている didFinishLoading を取得します。エラーの場合は、代わりに didFailWithError を取得します。

NSURLConnectionDelegate プロトコルのドキュメントを参照してください: https://developer.apple.com/library/mac/ipad/#documentation/Foundation/Reference/NSURLConnectionDelegate_Protocol/Reference/Reference.html

于 2012-12-18T05:49:36.627 に答える