2010年7月20日 星期二

iPhone 使用NSMutableURLRequest 參數TimeoutInterval沒起作用

通常有用到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

沒有留言:

張貼留言

內容回應