2

奇妙な問題。Webから画像をロードしたいので、NSURLConnectionを使用してロードします。iOS4.3でコードをテストするときは、すべて問題ありません。しかし、iOS5.0でアプリを起動すると、connection:didreceiveDataが何をしても呼び出されていないことがわかりました。その他の関数は、ios4.3のconnectionDidFinishLoadingやios5.0のconnectionDidFinishDownloadingと同様に、通常は呼び出されます。だから私を助けることができる皆さん、ありがとうございました!

-(void)load
{
    if(isDownloading){
        return;
    }
    if(conn != nil){
        [conn release];
    }
    if(data != nil){
        [data release];
        data = nil;
    }
    [self isDownloading:YES];
    ImageDownloadData* imageDownloadData = [imageList objectAtIndex:count];
    NSURL* url = [imageDownloadData url];
    NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
    conn = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    if(conn){
        [conn start];
    }
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)rd
{
    NSLog(@"data");
    if(!data){
        data = [[NSMutableData alloc] initWithData:rd];
        return;
    }
    [data appendData:rd];
}
4

1 に答える 1

4

これがあなたが抱えているのと同じ問題であるかどうかはわかりませんが、同様の問題があり、inメソッドとへの参照を削除することで解決しましたNSURLConnectionDownloadDelegate。どうやらのデリゲートは、一度NSURLConnectionに派生した2つのプロトコルのうちの1つしか実装できませんNSURLConnectionDelegate

4.3と5.0の間でいくつかの奇妙なAPIの変更がありました。AppleはNSURLConnectionDelegateを非公式プロトコルから公式プロトコルに変更し、いくつかのメソッドをNSURLConnectionDataDelegateNSURLConnectionDownloadDelegateの2つの追加サブプロトコルに分岐させました 。(奇妙なことに、彼らはNSURLConnectionDelegateの同じメソッドを減価償却しましたが、移動先を文書化しませんでした。)

6.0 APIに対してコードをコンパイルするときに、とのconnection: didReceiveData:両方からメソッドを実装すると、 CocoaTouchを呼び出すのに問題があることに気づきました。私が実装した他のすべてのメソッドは、期待どおりに呼び出されました。NSURLConnectionDataDelegateNSURLConnectionDownloadDelegate

于 2012-12-14T21:25:59.387 に答える