我正在玩我在网站上找到的这个教程。它是一个RSS Feed应用程序。这是链接:RSS Tutorial
我的RSS Feed在我的应用程序中运行。我很好奇,而不是有一个正常的刷新按钮,我选择了下拉刷新。 PullDownRefresh Tutorial
我在RSS feed中实现了。一切看起来都很好,工作但不爽快。所以我尝试添加一些代码,以便在我拉下tableview时刷新它。
我提出的代码是:
- (void)reloadTableViewDataSource {
//should be calling your tableviews data source model to reload.
//put here just for demo.
[self performSelector:@selector(refresh)];
_reloading = YES;
[self.tableView reloadData];
}
但这会复制Feed。
我尝试使用self.tableView.dataSource = nil;
在此之前清除我的数据源,但添加此内容会在此处崩溃:
` - (void)requestFinished:(ASIHTTPRequest *)request {
[_queue addOperationWithBlock:^{
NSError *error;
GDataXMLDocument *doc = [[GDataXMLDocument alloc] initWithData:[request responseData]
options:0 error:&error];
if (doc == nil) {
NSLog(@"Failed to parse %@", request.url);
} else {
NSMutableArray *entries = [NSMutableArray array];
[self parseFeed:doc.rootElement entries:entries];
NSSortDescriptor *itemSort = [[NSSortDescriptor alloc] initWithKey:@"articleDate" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:itemSort,nil];
[entries sortUsingDescriptors:sortDescriptors];
[[NSOperationQueue mainQueue] addOperationWithBlock:^{
for (RSSEntry *entry in entries) {
int insertIdx = [_allEntries indexForInsertingObject:entry sortedUsingBlock:^(id a, id b) {
RSSEntry *entry1 = (RSSEntry *) a;
RSSEntry *entry2 = (RSSEntry *) b;
return [entry1.articleDate compare:entry2.articleDate];
}];
[_allEntries insertObject:entry atIndex:insertIdx];
[self.tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:[NSIndexPath indexPathForRow:insertIdx inSection:0]] //Thread 1: Program received signal: "SIGABRT".
withRowAnimation:UITableViewRowAnimationRight];
}
}];
}
}];
}`
输出窗口显示:
由于未捕获的异常而终止应用 'NSInternalInconsistencyException',原因:'无效更新:无效 第0节中的行数。包含在中的行数 更新后的现有部分(0)必须等于数量 更新前的该部分中包含的行(0),加号或减号 从该部分插入或删除的行数(插入1个, 0已删除)。'
有什么想法吗?
答案 0 :(得分:0)
- (void)viewDidLoad
{
[super viewDidLoad];
self.navigationController.navigationBar.tintColor = [UIColor blackColor];
self.allEntries = [NSMutableArray array];
self.title= NSLocalizedString(@"News feeds", @"Storage");
self.queue = [[[NSOperationQueue alloc] init ] autorelease];
self.feeds = [NSArray arrayWithObjects:
@"feed://www.yourfeed.com/feed.xml",
nil];
[self.tableView reloadData];
// Add the right reload button
UIBarButtonItem *reloadButton = [[UIBarButtonItem alloc]
initWithTitle:NSLocalizedString(@"Refresh")
style:UIBarButtonItemStyleBordered
target:self
action:@selector(viewDidLoad)];
self.navigationItem.rightBarButtonItem = reloadButton;
self.navigationItem.rightBarButtonItem.style = UIBarButtonItemStyleDone;
[reloadButton release];
[self refresh];
}