0

ですから、これは私が経験した個人的な課題であり、助けていただければ幸いです. Big Nerd Ranch iOS book (第 3 版) から、私は現在、第 29 章の Nerdfeed プロジェクトの編集と改善を検討しています (プロジェクト全体をダウンロードするために、以下に Google ドライブのリンクを添付しました)。一定期間前のすべてのアイテムを自由に削除できるようにしたいと考えています。(仮説的に言えば) このアプリケーションのフィードが昨日の投稿を提供したとしましょう。これらの投稿をアプリケーションのどこにも保存したくないので、今日作成された投稿のみがアプリケーションに表示されるようにしたいと考えています。誰もこれについてどうやって行くのか知っていますか? 古いフィード/アイテムを切り取るために書いた次のコード スニペットを使用しようとしています。不運にも、このコードの配置が面倒になり、(キャッシュ、テーブル データ、およびフェッチされたデータから) すべてを取り除くことができないようです。アニメーションを介してテーブルビューから項目を削除しようとすると、実際の問題が発生します (一貫性のある範囲外エラー)。

if ([[[channelCopy items] lastObject] class] == [BNRItem class]) {

    NSDate *cutOffDate = [[NSDate date] dateByAddingTimeInterval:kfeedCutOff*24*60*60];
    NSLog(@"Response: %d",[[[[channelCopy items] lastObject] publishDate] compare:cutOffDate]);
    while (([[channelCopy items]lastObject] != NULL) && ([[[[channelCopy items] lastObject] publishDate] compare:cutOffDate] == NSOrderedAscending)) {
        NSLog(@"Removed: %@", [[channelCopy items] lastObject]);
        [[channelCopy items] removeLastObject];
    }
}

fethEntries 内に、次のスニペットを追加しようとしました:

int itemDelta = newItemCount - currentItemCount;
if (itemDelta > 0) {
    NSMutableArray *rows = [NSMutableArray array];
    for (int i = 0; i < itemDelta; i++) {
        NSIndexPath *ip = [NSIndexPath indexPathForRow:i inSection:0];
        [rows addObject:ip];
    }

    [[self tableView] insertRowsAtIndexPaths:rows withRowAnimation:UITableViewRowAnimationTop];
}
else if (itemDelta < 0) { //Removes outdated cells from the tableView
    NSLog(@"We have a problem");
    NSMutableArray *rows = [NSMutableArray array];
    for (int i = 0; i > itemDelta; i--) {
        NSIndexPath *ip = [NSIndexPath indexPathForRow:(i + currentItemCount) inSection:0];
        [rows addObject:ip];
    }
    [[self tableView] deleteRowsAtIndexPaths:rows withRowAnimation:UITableViewRowAnimationBottom];
}

ゼロマークで削除すると、tableViewsに少なくとも1行挿入する必要があると聞いたことがあります...私も試しました。何かご意見は?

プロジェクト リンク

4

1 に答える 1

0

なぜなら、テーブルビューに日付だけがあるとしましょう。そして、現在の時刻よりも古いすべての日付を削除したいとします。

NSDate* date            = [NSDate date];

// SELF will means "date" into the context. "SELF >=" equal to compare NSOrderedAscending
// predicate will be used into a mutable array of dates.
NSPredicate *predicate  = [NSPredicate predicateWithFormat:@"(SELF >= %@)", date];

// this array is used for the tableView display
[myMutableArrayForTableView filterUsingPredicate: predicate];

// Since tableview use myMutableArrayForTableView , now you can update the content:
[(UITableView*)self.view reloadData];

4 行のコードを参照してください。車輪を再発明する必要がないため、NSpredicate を使用する必要があります。しかし、私はあなたが答えを知っている今、私はあなたを台無しにしました;)

于 2013-03-25T16:16:00.153 に答える