2012-11-12 83 views
0

這裏是我的代碼:NSURL請求?註冊和登錄

//login method 
- (int) authenticateClient { 
NSString *loginWeb = [NSString stringWithFormat:(@"http://192.168.118.1/login.php?uname=%@&pass=%@&submit=Log%%20In"), user, pass]; 
NSURL *login = [NSURL URLWithString:loginWeb]; 
NSData *loginData = [NSData dataWithContentsOfURL: login]; 
NSString *result = [[NSString alloc] initWithData:loginData encoding:NSUTF8StringEncoding]; 
NSMutableURLRequest *loginRequest = [[NSMutableURLRequest alloc] init]; 
[loginRequest setURL:login]; 
[loginRequest setTimeoutInterval:1]; 

NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:loginRequest delegate:self startImmediately:YES]; 
[connection start]; 
    return [result integerValue]; 
} 

我的問題是,模擬無網絡連接時,我的應用程序死機,並在指定的時間間隔不加載或超時(即1秒正好看到如果有效的話)。

我讀了一些關於啓動的信息,立即強制運行當前的威脅,導致其他所有內容「暫停」,直到操作完成。

我有兩個問題:

1)什麼是更好的方法有URL基本背景,而不是暫停一切運行?

2.)我怎樣才能得到一個實際工作的超時方法?

非常感謝!謝謝!

+0

你的問題沒有意義。你有兩塊代碼都試圖達到同樣的效果。而且也沒有必要'-start'時,它已經開始 –

回答

0

好吧,秒超時真的很低。如果你想模擬不同的網絡條件,你可以使用類似this。你並不需要這個舞蹈:

NSData *loginData = [NSData dataWithContentsOfURL: login]; 
NSString *result = [[NSString alloc] initWithData:loginData encoding:NSUTF8StringEncoding]; 

你不需要這個爲好,因爲連接已經開始不已:

[connection start]; 

同樣來自documentation

NSURLConnection的委託方法 - 由 NSURLConnectionDelegate協議協議定義 - 允許一個對象接收有關異步加載的信息回調函數 一個URL請求。 其他委託方法提供的功能允許委託人自定義執行異步URL加載的過程 。這些 代理方法在爲相關NSURLConnection對象啓動 異步加載操作的線程上調用。

因此,對於你的問題:

  • 落實NSURLConnection’s委託
  • 檢查this & this
+0

我討厭這樣說的'NSURLConnection',但我不完全理解這個答案... 是否有你能告訴我一個例子的方式碼?如果無法建立連接,我的應用程序仍會凍結,並且默認/最小超時方法爲240秒(因此,不幸的是1秒無關緊要)。我不希望用戶必須等待4分鐘以使方法超時,並且如果線程凍結,直到連接方法返回成功或不成功,我都不能使用倒數計時器。 :( –