iPhone RSS阅读器应用程序刷新问题

时间:2011-07-11 09:36:20

标签: iphone uitableview rss refresh reload

我正在玩我在网站上找到的这个教程。它是一个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已删除)。'

有什么想法吗?

1 个答案:

答案 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];

}