我已經有了對象下面(的相關部分):EXC_BAD_ACCESS在會話超時使用ASIHTTPRequest
#import "HTTPHelper.h"
#define TIME_OUT_SECONDS 30
@interface HTTPHelper (Private)
- (ASIHTTPRequest *)sendRequest:(ASIHTTPRequest *)request error:(NSMutableArray*)error;
@end
@implementation HTTPHelper
@synthesize delegate;
- (void) invokeSessionTimeout {
[ASIHTTPRequest clearSession];
if (delegate != nil) {
[delegate sessionTimedOut];
}
}
- (ASIHTTPRequest *)sendRequest:(ASIHTTPRequest *)request error:(NSMutableArray*)error {
if (request == nil) {
return nil;
}
[request setTimeOutSeconds:TIME_OUT_SECONDS];
[request setValidatesSecureCertificate:NO];
[request startSynchronous];
if ([request responseStatusCode] == 0) {
return nil;
}
if ([request responseStatusCode] < 200 || [request responseStatusCode] >= 400) {
if ([request responseStatusCode] == 403 && [error count] == 0 && delegate != nil) {
NSLog(@"session has timed out.");
// CRASH HAPPENS HERE:
[self performSelectorOnMainThread:@selector(invokeSessionTimeout) withObject:nil waitUntilDone:YES];
return nil;
}
}
return request;
}
@end
這裏的標題:
#import "ASIHTTPRequest.h"
@protocol HTTPHelperDelegate
- (void) sessionTimedOut;
@end
@interface HTTPHelper : NSObject {
id<HTTPHelperDelegate> delegate;
}
@property (nonatomic, assign) id<HTTPHelperDelegate> delegate;
@end
它崩潰就行與performSelectorOnMainThread
通話。我認爲這是第一個問題,因爲這是在主線程上發生的,但是文檔說如果你不知道哪個線程將調用你的方法,你應該使用這個方法,所以不應該是這樣的。
我一直試圖確保委託是一個指向我的對象的指針。這顯然不是零,(也不是錯誤的)。當我崩潰並將鼠標懸停在代理上時,它顯示「struct objc_object * delegate 0x65696d0」...但是當我在調試器中打印該對象時,它說「0x65696d0看起來不是指向有效的對象」。
我在兩個視圖控制器的viewDidUnload
方法中將代理設置爲零,將它們自己設置爲委託。我應該使用retain
而不是assign
?
我在做別的東西顯然不對嗎?
感謝您的閱讀。