使用AFNetworking時,怎么優(yōu)雅的顯示網(wǎng)絡(luò)丟失(network lost)占位符

大家在開發(fā)APP的時候總會碰到call接口網(wǎng)絡(luò)超時或者網(wǎng)絡(luò)丟失的情況,那么這種情況下比較好的用戶體驗是在當(dāng)前頁面展示一個占位符,占位符上有重新刷新頁面的按鈕讓用戶可以重新刷新頁面,效果如下:

WechatIMG59.jpeg

給頁面加一個占位符是很簡單的,但是怎么做一個全局的占位符機(jī)制是我們需要做的,因為任何頁面都有可能觸發(fā)這個機(jī)制,如果對所有的ViewController都加一個占位符的方法,會顯得很多余。我對這個機(jī)制的做法是這樣的:

添加placeholder機(jī)制:

  • 在項目里我會有一個UIViewController的基類,叫做BaseViewController,項目里所有業(yè)務(wù)相關(guān)的UIViewController都會基于這個BaseViewController,在這個基類里,我加了一個方法叫handleErrorMessage:(NSError *)error,這個方法會處理網(wǎng)絡(luò)請求返回的錯誤信息,在AFNetworking里當(dāng)errorCode是-1009的時候代表網(wǎng)絡(luò)丟失,這種情況下,我們將要給當(dāng)前的ViewController加上網(wǎng)絡(luò)丟失的placeholder

網(wǎng)絡(luò)請求重新加載機(jī)制:

  • 首先,在項目里我會有一個protocol給所有的ViewController可以implement,暫且叫ViewController,在這個protocol里我會加上一些每個UIViewController可能會用到的方法,其中一個方法叫 -(void)reloadView,這個方法是用來重新call當(dāng)前頁面的網(wǎng)絡(luò)請求,簡單說就是用戶按下placeholder頁面上重新加載的button,會調(diào)用當(dāng)前ViewController里的reloadView方法
  • 在重新加載網(wǎng)絡(luò)請求成功后,發(fā)送一個notification

去除placeholder機(jī)制:

  • BaseViewController里,我們會observe網(wǎng)絡(luò)請求成功的notification,然后隱藏當(dāng)前ViewController的placeholder

完整demo代碼如下:

BaseViewController.m

- (void)handleErrorMessage:(NSError *)error
{
    // ViewController network request failed
    if (error.code == -1009) {
        [self showNetworkLostPlaceholder];
    }
}

#pragma mark - <Network Success Notification>
- (void)requestSuccess:(NSNotification *)notification
{
    // ViewController network request successfully
    [self hideNetworkLostPlaceholder];
}

#pragma mark - <Placeholder Delegate>
- (void)reloadButtonClicked
{
    // placeholder page reload button clicked
    if ([(id<ViewController>)self respondsToSelector:@selector(reloadView)]) {
        // this will make current UIViewController request network
        [(id<ViewController>)self reloadView];
    }
}

ViewController.h

@protocol ViewController <NSObject>

@optional

- (void)reloadView;

@end

轉(zhuǎn)載請注明出處,原文地址:http://kobedai.me/p9rsts-6e/

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容