Проблема с обновлением в приложении для чтения RSS для iPhone - PullRequest
0 голосов
/ 11 июля 2011

Я играю с этим уроком, который нашел на сайте.Это приложение RSS Feed.Вот ссылка: Учебник RSS

У меня есть RSS-лента, работающая в моем приложении.Мне стало любопытно, и вместо обычной кнопки обновления я выбрал раскрывающееся обновление. PullDownRefresh Tutorial

Я реализован в ленте RSS.Все выглядит хорошо и работает, но просто не освежает.Поэтому я попытался добавить некоторый код, чтобы он обновлялся, когда я опускаю таблицу вниз.

Код, который я ввел:

- (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];
}

Но это дублирует каналы.

Я пытался очистить свой источник данных до этого с помощью self.tableView.dataSource = nil;, но добавление этого сбояэто здесь:

`- (void) requestFinished: (ASIHTTPRequest *) запрос {

[_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 голосов
/ 14 июля 2011
- (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];

}
...