通常有用到http connection的人都會需要處理connection timeout問題
但是最近卻遇到了TimeoutInterval沒起作用的問題
這是一般的用法:
1
2
3
4
| NSMutableURLRequest* request = [[NSMutableURLRequest alloc
initWithURL: [NSURL URLWithString: serverurl]
cachePolicy:NSURLRequestReturnCacheDataElseLoad
timeoutInterval:240];
|
但是根據Apple官方的論壇提到 timeout預設值為240秒
只要低於這個值都會被自動忽略
所以想把timeout時間設短的人就需要自行做一個timer
1
2
3
4
5
6
7
8
9
10
11
12
| SEL sel = @selector(customCancel);
NSMethodSignature* sig = [self methodSignatureForSelector:sel];
NSInvocation* invocation = [NSInvocation invocationWithMethodSignature:sig];
[invocation setTarget:self];
[invocation setSelector:sel];
NSTimer *timer = [NSTimer timerWithTimeInterval:CUSTOM_TIMEOUT
invocation:invocation
repeats:NO];
[[NSRunLoop mainRunLoop] addTimer:timer
forMode:NSDefaultRunLoopMode];
|
把上面這段程式跟NSMutableURLRequest放在一起
接著實作
customCancel 這個部分
1
2
3
4
5
6
| - (void)customCancel{
if (connection) {
[connection release];
connection = nil;
}
}
|
這樣就可以了!
參考資料:
stackoverflow