0

Restkit を使用して、ファイルを非同期でダウンロードしたいと考えています。ただし、sendAsynchronously メソッドを使用するとアプリケーションがクラッシュします。sendAsynchronously の代わりに sendSynchronously を使用すると、クラッシュしませんでした。理由を知っている人はいますか?

これが私のコードです

NSString *passURL = @"https://s3.amazonaws.com/mheydt-mhtnd/2012-03-13-1.png";
        RKRequest *request = [RKRequest requestWithURL:[NSURL URLWithString: passURL]];
        request.delegate = self;
        [request sendAsynchronously];


- (void)request:(RKRequest *)request didReceiveResponse:(RKResponse *)response {
    NSLog(@"didReceiveResponse");
}

- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response {
   NSLog(@"didLoadResponse");   
}

どうもありがとうございました!

4

1 に答える 1

0

このように使用sendAsynchronouslyすると、リクエストは保持されません。sendのインスタンスにリクエストを追加するメソッドを使用することをお勧めしますRKRequestQueue(リクエストがすぐに解放されるのを防ぎます)。

[request send];

または、リクエストを自分で強く参照できます。コードは次のようになります。

@interface MyClass
{
    RKRequest *request;
}

これは強力なリファレンスであると想定しています。実装では、次のようになります。

@implementation MyClass

- (void)sendTheRequest
{
    NSString *passURL = @"https://s3.amazonaws.com/mheydt-mhtnd/2012-03-13-1.png";
    request = [RKRequest requestWithURL:[NSURL URLWithString: passURL]];
    request.delegate = self;
    [request sendAsynchronously];
}

- (void)request:(RKRequest *)request didReceiveResponse:(RKResponse *)response {
    NSLog(@"didReceiveResponse");
    request = nil;
}

- (void)request:(RKRequest *)request didLoadResponse:(RKResponse *)response {
    NSLog(@"didLoadResponse");
    request = nil;
}

- (void)request:(RKRequest *)request didFailLoadWithError:(NSError *)error {
    NSLog(@"didFailLoadWithError");
    request = nil;
}

@end
于 2013-04-03T12:53:42.953 に答える