0

ここでは、AFNetworking を介して JSON を取得および解析する標準的な方法を使用しています。データは、テーブル ビューへの入力に使用されます。

NSURL *url = [NSURL URLWithString:serverURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url];

AFJSONRequestOperation *operation = [AFJSONRequestOperation
                                     JSONRequestOperationWithRequest:request
                                     success:^(NSURLRequest *request, NSHTTPURLResponse *response, id json) {
                                         [refresh endRefreshing];
                                         self.results = [json valueForKeyPath:@"data"];
                                         [self.tableView reloadData];
                                     } failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
                                         [refresh endRefreshing];
                                     }];
[self.tableView reloadData];
[operation start];

このままでは、ユーザーがプルしてテーブル ビュー全体を更新するたびに、1 秒ほど後に新しいデータが読み込まれ、ユーザーに表示されます。ただし、新しいデータが利用可能になりロードされるまで、テーブル内のデータをそこに残しておきたいと思います。[self.tableView reloadData];だから私はそれを機能させる考えをコメントアウトしました.目に見えて最初の数秒間は機能しますが、アプリケーションはすぐにクラッシュします. エラーで:

キャッチされていない例外 'NSRangeException' が原因でアプリを終了しています。理由: ' * -[__NSArrayI objectAtIndex:]: インデックス 1 が空の配列の境界を超えています'

今、これが正しい方法であると完全には確信していません。したがって、基本的に、私の質問は、新しいデータがロードされるまでテーブルビューにデータを保持する方法、または既存のデータをテーブルビューにプッシュする方法です。ニュース フィード/タイムラインを更新するときの Facebook や Twitter アプリのようなものです。

アップデート

私はこの方法を試しました:

NSIndexPath *indexPath = [NSIndexPath indexPathForRow:[self.results count] inSection:0];
NSArray *indexArray = [NSArray arrayWithObjects:indexPath, nil];
[self.tableView insertRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationAutomatic];

しかし、次のエラーが表示されます。

キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了しています。

4

1 に答える 1