2011-07-11 9 views
0

私はこのチュートリアルをウェブサイト上で見て回っています。 RSSフィードアプリケーションです。ここにリンクがあります:RSS TutorialiPhone 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;とこれに先立ち、私のデータソースをクリアしようとしたが、これはここでそれをクラッシュ追加:

` - (ボイド)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
- (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]; 

} 
関連する問題