0

所以这是我一直在经历的一个个人挑战,我很想得到帮助。从 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 至少需要插入一行...我也尝试过这样做。有什么想法吗?

项目链接

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 回答