読者です 読者をやめる 読者になる 読者になる

【swift】ネットワーク通信状況でのエラー処理を実装する方法メモ

はじめに

アプリの場合、インターネットとつながっていない場合の処理を考慮する必要があります。
僕の場合、ある程度アプリを作ってからこのことを考え始めましたが、本来であれば最初から頭にいれて開発を進めるべきだったんですね。

で、どうするのがいいかなと考えたのですが、以下のような画面を表示して再度ユーザに再読み込みボタンを押してもらうのがシンプルかなという結論に達しました。

f:id:yoppy0066:20151004001841p:plain

ライブラリ

ネットワーク状況を確認するライブラリを検索すると、
swiftではReachabilityというのがよく出てきたのでこれをつかってみました。

Swift でネットワーク状況を調べる - メモ用紙
こちらの記事によると、クラス名を変えたほうが審査とかで無難なようなので(ios標準のクラスとかぶってリジェクトになった例があるらしい)、マネたほうがいいかも

なので、cocoapodsからでなくgithubから直接ダウンロードして使いました

実装

ViewController.swift

class ViewController: UIViewController
{
    override func viewDidLoad()
    {
        super.viewDidLoad()
    }
    
    let reachability = AMReachability.reachabilityForInternetConnection()

    // インターネット接続中なら通常の処理
    if reachability!.isReachable()
    {
        // 通常の画面に必要なビューを追加したり
        // データを取得したり
    }
    // インターネット接続なし
    else
    {
        // エラー画面のビューを追加
        ・・・
        // 再読み込みボタンが押された場合
        buttonRefresh.addTarget(self, action: "onRefresh:", forControlEvents: UIControlEvents.TouchUpInside)
    }
}

// 再読み込みボタンがおされたら再描画
func onRefresh(sender: UIButton)
{
    self.viewDidLoad()
}

基本的に全画面での実装が必要になる部分になるかと思うので、BaseViewControllerとか作って、もうすこし共通化できるようにとは思いますが。
とりあえずはこんな形で実装するのが、シンプルかつ違和感もないのではないかなぁと思いました。

以上です