0

これが、ViewControllerに私の単純なviewDidLoadメソッドとUITableViewデリゲートがあります。

import "HomeViewController.h"
import "AFNetworking.h"
import "SVPullToRefresh.h"

- (void)viewDidLoad
    {
        [super viewDidLoad];
        [self parseJsonMethod];
        items = [[NSMutableArray alloc] init]; // UPDATED CODE
        items2 = [[NSMutableArray alloc] init]; // UPDATED CODE

        [table addPullToRefreshWithActionHandler:^{
        [self parseJsonMethod]; // <--- what's the number of NEW items after refreshing?
    }];
}

- (void)parseJsonMethod{
    // code to parse JSON file from the net ---> here I get NSMutableArray *items 

NSURLRequest *requestJSON = [NSURLRequest requestWithURL:urlJSON];
AFJSONRequestOperation *operationJSON = [AFJSONRequestOperation
                                           JSONRequestOperationWithRequest:requestJSON
                                           success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {
                                               NSMutableArray *results = [JSON valueForKey:@"results"];

                                               // UPDATED CODE

                                               for (id obj in [results valueForKey:@"value"]) {
                                                   if (![items containsObject:obj]) {
                                                       [items addObject:obj];
                                                   }
                                               }

                                               for (id obj2 in [results valueForKey:@"value2"]) {
                                                   if (![items2 containsObject:obj2]) {
                                                       [items2 addObject:obj2];
                                                   }
                                               }

                                               // END OF UPDATED CODE

                                               [table reloadData];
                                               [table scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
                                               [table.pullToRefreshView stopAnimating];
                                           }
                                           failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {
                                               NSLog(@"%@", [error userInfo]);
                                           }];
  [operationJSON start];
  [table reloadData];
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [items count]; // <--- items is the NSMutableArray parsed from JSON file on the net: HERE I HAVE THE PROBLEM, ITS ALWAYS 10!
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:
                UITableViewCellStyleSubtitle reuseIdentifier:@"Cell"];
    }

      cell.textLabel.text = [NSString stringWithFormat:@"%@",[items objectAtIndex:indexPath.row]];
      cell.detailTextLabel.text = [NSString stringWithFormat:@"%@",[items2 objectAtIndex:indexPath.row]];

    return cell;
}

ご覧のとおり、テーブルをプルした後にデータを更新するためにSVPullToRefreshクラスを実装しました。これは完璧です。プルした後、新しいデータを表示できますが、同じ行に表示されます(更新の前後の行数は10です)。テーブルをプルして新しい解析を行った後に新しい行を追加し、古いデータで古い行を維持したいと思います(毎回10+新しいアイテム+...)。それを行う簡単な方法はありますか?または少なくとも新しいアイテムの数を認識するために?おそらくinsertRowsAtIndexPathsデリゲートを実装していますか?私を助けてください。

更新:新しい編集済みコードを参照してください。以前にアイテムを宣言しましたが、まだ問題があります。

4

1 に答える 1

1

あなたがしていることは、与えられた新しい行があれば新しい行を追加します。ここでの問題はitems配列です。JSONソースから取得するデータが何であれ、それをitems配列に追加することが問題になります。

さらにヘルプが必要な場合は、JSONコードと、items配列が最初とリロードの両方で入力される場所を示してください。アイテムに新しい行がない場合、それらはテーブルにありません。

アップデート

この行で:items = [results valueForKey:@"value"]; // (initial number of items = 10)

私はこのようなことを試してみます:

for (id obj in [results valueForKey:@"value"]) {
    if (![items containsObject:obj]) {
        [items addObject:obj];
    }
}

これにより、重複するアイテムがないかチェックされ、既存のアイテムに追加されます。JSONフィードが同じアイテムを10個返し、違いが表示されない場合でも、問題が発生する可能性があります。

超ベーシックの場合は、それが正しく機能することを確認するだけです[items addObjectsFromArray:[results valueForKey:@"value"]];

于 2012-12-13T13:29:38.300 に答える