1

このチュートリアルを使用して RSS リーダーに取り組んでいます。すべてのテーブル セル データはNSMutableArrayインスタンス (_allEntries) から取得されます。次に、インポート EGOTableViewPullRefreshして追加[self refresh]します-(void)reloadTableViewDataSource(self.refreshは allEntries のデータを入力するメソッドです)。次に、プルして更新しますが、更新するたびにセルが複製されます。私はそれを2つの方法で解決しようとしました。

  1. インターネットからデータをダウンロードするとき、if (![_allEntries containsObject:entry])前に追加しましたが機能しませんでした。比較するためにオブジェクトにまたは他の属性を[_allEntries insertObject:entry atIndex:insertIdx]使用する必要があるかもしれませんが、効果的ではありません。entry.title

  2. で行ったように-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) と等しくなります。」
前述のように、この行をどこに置くべきかについて、私は本当に混乱します。
もぅ~~

4

1 に答える 1

0

配列を構築する viewDidLoad にあるロジックは、独自のメソッド (reloadTableViewData) に移動する必要があります。その後、viewDidLoad でそのメソッドを呼び出すだけです。

[self reloadTableViewData];

プルして更新するときにも、同じメソッドを呼び出します。

既存の配列にオブジェクトを追加するだけでなく、その配列を再構築していることを確認してください。

于 2012-05-13T11:24:08.293 に答える