0

サーバーに (AFNetworking を使用して) 呼び出しを行っています。そのデータを取得したら、それを配列に入れ、画面の更新を呼び出します。ここまでは順調ですね。しかし、サーバーへの非同期呼び出しを使用して、表示するデータがないことをユーザー (セル内など) に伝える方法がわかりません。そして、表示するデータがある場合は、「表示するデータがありません」セルを取り除きます。

iOS 6.1 を使用していますが、iOS 5 をサポートしたいと考えています。

4

1 に答える 1

1

私の理解が正しければ、結果がない場合に「表示するデータがありません」というメッセージを表示し、データが利用可能になったときにそれを置き換える方法が必要です。

私のアプローチは、通常、コンテンツの読み込みを開始するとき (つまり、最初にサーバーを呼び出すとき) に読み込みインジケーター (テーブル ビューに重ねて表示) をユーザーに表示することです。現在データをロードしているかどうかを追跡するフラグをコントローラーに設定できます。ロードを開始するときはこれを YES に設定し、ロードが完了すると NO に設定します。読み込み中は、テーブルにセルを表示することはできません (読み込み中であることをユーザーに示す他のディスプレイがあると仮定します)。例えば

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   if (isLoading) return 0; //Don't display any cells while loading

   if (modelArray.count == 0) return 1; //1 row for the cell indicating there's no data

   return modelArray.count; //1 row for each entry in array
}

サーバーからデータが返されたら、読み込みインジケーターを削除し、テーブル ビュー データを更新します。

データが返されない場合、おそらくモデル配列は空になります。UITableViewDataSourceでこのケースを確認しtableView:cellForRowAtIndexPath:、配列が空の場合は、データがないことを示すメッセージを含むセルを返します。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (modelArray.count == 0)
    {
        return noResultsMessageCell;
    }
    else
    {
        <normal cell dequeueing code>
    }
}
于 2013-07-24T03:03:09.337 に答える