我在我的應用程序中使用AFNetworking
爲每個請求(如登錄,從網址獲取數據等)。以此爲例:用戶點擊登錄按鈕並且沒有連接,如何即時顯示UIAlertView
表示錯誤? 只有的方式是等待請求超時並執行failure
塊?沒有辦法立即檢查是否存在連接?AFNetworking和沒有互聯網連接方案
謝謝!
我在我的應用程序中使用AFNetworking
爲每個請求(如登錄,從網址獲取數據等)。以此爲例:用戶點擊登錄按鈕並且沒有連接,如何即時顯示UIAlertView
表示錯誤? 只有的方式是等待請求超時並執行failure
塊?沒有辦法立即檢查是否存在連接?AFNetworking和沒有互聯網連接方案
謝謝!
由於0.9,AFHTTPClient
實際上有內置的網絡可達性(一個簡單的界面,蘋果的上述可達代碼)。只要包含SystemConfiguration
框架並使用-setReachabilityStatusChangeBlock:
指定可達性狀態更改時的響應。
如何使用Reachability?
您可以檢查是否有試圖連接你這樣做之前,一個似是而非的理由。
看起來像Apple Sample Project for Reachability顯示如何獲得初始狀態。
對於任何情況下可達沒有返回,不會將任何套接字I/O失敗,立即嗎? – smparkes 2012-02-12 23:04:27
是的,這就是Reachability的工作原理,但它提供了額外功能,例如在可達性更改時接收通知的功能 - 中斷,而不是輪詢。 – 2012-02-12 23:18:13
對不起,亞當,但如果網絡沒有使用,但設備已連接,我檢查網絡狀態,可達性告訴我,我沒有任何關係。這個答案解釋了我會說更好的方式:http://stackoverflow.com/a/9186073/719127 – 2012-02-12 23:22:35
也許你可以使用「Reachability」來確定設備是否連接到網絡。 以下是Apple Doc的鏈接。 :Reachability
例如:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleNetworkChange:) name:kReachabilityChangedNotification object:nil];
reachability = [Reachability reachabilityForInternetConnection];
[reachability startNotifier];
NetworkStatus remoteHostStatus = [reachability currentReachabilityStatus];
if(remoteHostStatus == NotReachable) {
//Your UIAlertView
}
隨着AFNetworking
這些都是一個人爲了充分利用setReachabilityStatusChangeBlock:
加入AFNetworing班後要遵循的步驟 -
SystemConfiguration.framework
到項目#import <SystemConfiguration/SystemConfiguration.h>
AFHTTPClient
的子類,請在init函數中添加以下代碼行 -[self setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) { NSLog(@"changed %d", status); //your code here }];
我使用AFNetworkingOperationDidFinishNotification
。 每次HTTP請求將會失敗,警報彈出並告知用戶
- (void)addNetworkObserver
{
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(HTTPOperationDidFinish:)
name:AFNetworkingOperationDidFinishNotification
object:nil];
}
- (void)HTTPOperationDidFinish:(NSNotification *)notification
{
AFHTTPRequestOperation *operation = (AFHTTPRequestOperation *)[notification object];
if (![operation isKindOfClass:[AFHTTPRequestOperation class]]) {
return;
}
if (operation.error) {
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Connection error"
message:@"Missing connection to the internet"
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alert show];
}
}
嗨mattt和謝謝你的回覆。但是你的建議是在使用互聯網的每個**方法之前檢查互聯網連接的當前狀態,並且如果沒有連接顯示警報, – 2012-02-13 05:22:18
不,完全沒有。 'AFHTTPClient'監視可達性的變化並在發生時執行指定的塊。該塊有一個參數,它是否是'baseURL'可達的布爾值。 – mattt 2012-02-13 05:33:05
我已經將子類'AFHTTPClient'並且我已經用'NSLog(@「test」)'覆蓋了'-setReachabilityStatusChangeBlock:',但是這個語句永遠不會被執行。爲什麼? – 2012-02-15 05:01:07