我正在使用this tutorial处理RSS阅读器。所有表格单元数据都来自NSMutableArray
实例(_allEntries)。然后我导入
EGOTableViewPullRefresh
并在[self refresh]
中添加-(void)reloadTableViewDataSource
(self.refresh
是一种填充allEntries数据的方法)。
然后拉动刷新工作,但每次刷新时单元格都会重复。我试图以两种方式解决它。
从互联网下载数据时,在if (![_allEntries containsObject:entry])
之前添加[_allEntries insertObject:entry atIndex:insertIdx]
但它不起作用,也许我应该在对象中使用entry.title
或其他一些属性比较,但它无效。
就像我在-viewDidLoad
中所做的那样,添加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
我把[自我更新]放在reloadTableViewDataSource中,第一次打开我的应用程序时,桌面视图中没有显示任何内容。然后我拉动刷新,它的工作原理。然后再次刷新,它重复了。
这是"刷新"方法
- (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)"之前该部分中包含的行数。
如上所述,我真的很困惑我应该把这条线放在哪里。
感谢~~
答案 0 :(得分:0)
构建数组的viewDidLoad中的逻辑应该移动到它自己的方法(reloadTableViewData),然后你只需要在viewDidLoad中调用该方法。
[self reloadTableViewData];
当你进行刷新时,你也会调用相同的方法。
确保您正在重建该阵列,而不仅仅是将对象添加到现有阵列。