ですから、これは私が経験した個人的な課題であり、助けていただければ幸いです. 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行挿入する必要があると聞いたことがあります...私も試しました。何かご意見は?