2012-10-10 27 views
0

我想使用Restkit異步下載文件。但是,使用sendAsynchronously方法時應用程序崩潰。如果我使用sendSynchronously而不是sendAsynchronously,它沒有崩潰。有沒有人知道爲什麼?與RKRequest異步使用send時的應用程序崩潰

這裏是我的代碼

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"); 
} 

非常感謝您!

+0

你能否詳細說明從崩潰的堆棧跟蹤? – FluffulousChimp

+0

日誌中沒有任何日誌。這裏是堆棧跟蹤https://dl.dropbox.com/u/14181582/_temp/bugs/Screen%20Shot%202012-10-10%20at%201.42.23%20PM.png –

+0

奇怪的是,它在'RKResponse ''NSURLConnectionDelegate'方法因爲_delegate似乎已經消失。在這種情況下,'_delegate'是'self'在委託回調之前'self'是否被釋放? – FluffulousChimp

回答

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