所以这是我一直在经历的一个个人挑战,我很想得到帮助。从 Big Nerd Ranch iOS 书(第 3 版)中,我目前正在研究编辑和改进他们的第 29 章 Nerdfeed 项目(我在下面附上了一个谷歌驱动器链接以下载整个项目)。我希望能够随意删除某个时间段之前的所有项目。假设(假设地)此应用程序的提要为您提供了昨天的帖子。我不希望这些帖子存储在我的应用程序中的任何位置,并希望确保只有今天创建的帖子才会显示在应用程序中。有谁知道该怎么做?我一直在尝试使用我编写的以下代码片段来删除旧的提要/项目。很遗憾,这段代码的放置变得很麻烦,我似乎无法摆脱所有东西(来自缓存、表数据和获取的数据)。真正的问题在尝试通过动画从 tableview 中删除项目时生效(一致的越界错误)。
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 至少需要插入一行...我也尝试过这样做。有什么想法吗?