1

我正在使用本教程开发 RSS 阅读器。所有表格单元格数据都来自一个NSMutableArray实例 (_allEntries)。然后我导入 EGOTableViewPullRefresh并添加[self refresh]-(void)reloadTableViewDataSourceself.refresh一种填充 allEntries 数据的方法)。然后拉刷新作品,但每次我刷新时都会重复单元格。我试图通过两种方式解决它。

  1. 从互联网下载数据时,if (![_allEntries containsObject:entry])之前添加[_allEntries insertObject:entry atIndex:insertIdx]但它不起作用,也许我应该使用entry.title对象中的或其他一些属性来比较但它没有效果。

  2. 就像我在-viewDidLoad, add中所做的一样self.allEntries = [NSMutableArray array],但我不知道我应该把这条线放在哪里。

有没有人可以给我一个方向?

[编辑]
viewDidLoad 中没有太多逻辑,只是

    self.allEntries = [NSMutableArray array];
    self.queue = [[NSOperationQueue alloc] init]; //add download&parse operation to a queue 
    self.feeds = [self getFeeds];  //load feeds from local file

我将[self refresh]放在reloadTableViewDataSource中,第一次打开我的应用程序时,tableview中没有任何显示。然后我拉刷新,它的工作原理。然后再次拉动刷新,它被重复了。
这是“刷新”方法。

    - (void)refresh {
        for (NSString *feed in _feeds) {
            NSURL *url = [NSURL URLWithString:feed];
            ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
            [request setDelegate:self];
            [_queue addOperation:request];
        }    
    }

我想重建数组,所以我再次编写 self.allEntries = [NSMutableArray array] 但结果是
“无效更新:第 0 节中的行数无效。更新后现有节中包含的行数 (1) 必须等于更新之前该部分中包含的行数(140)”。
如前所述,我真的很困惑我应该把这条线放在哪里。
谢谢~~

4

1 回答 1

0

您在 viewDidLoad 中构建数组的逻辑应移至其自己的方法 (reloadTableViewData),然后您只需在 viewDidLoad 中调用该方法。

[self reloadTableViewData];

当您执行拉动刷新时,您也可以调用相同的方法。

确保您正在重建该数组,而不仅仅是将对象添加到现有数组。

于 2012-05-13T11:24:08.293 回答