2012-10-10 30 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