所以这是我一直在经历的个人挑战,我会很乐意帮助。从Big Nerd Ranch iOS书籍(第3版)开始,我正在研究编辑和改进他们的第29章Nerdfeed项目(我附上了一个谷歌驱动器链接,下载整个项目)。我希望能够按照我的意愿删除特定时间段之前的所有项目。说(假设地说)这个应用程序的饲料提供了昨天的帖子。我不希望这些帖子存储在我的应用程序中的任何位置,并且希望确保仅在今天创建的帖子显示在应用程序中。有谁知道如何去做这件事?我一直在尝试使用以下我写的代码片断来删除旧的feed/items。不幸的是,放置这段代码变得很麻烦,我似乎无法摆脱所有事情(从缓存,表格数据和抓取的数据)。当试图通过动画从桌面视图中删除项目(一致出界错误)时,真正的问题会生效。通过日期/时间限制删除旧的缓存和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需要的,如果你删除零标记至少一行插入...我”我也尝试过。有什么想法吗?
CoreData + NSFetchResultController + NSManagedObject谁处理日期对象。然后,这是一个孩子玩,让你的对象按照你想要的方式排序。和NSFetchResultController是真的为此。因为你现在正在做的是一个有点丑陋;) – 2013-03-22 15:55:19
这是丑陋的时候试图删除项目....我从来没有看过NSFetchResultController之前。它是否仅用于核心数据?这个应用程序不会严重依赖核心数据。它通过NSCoding协议缓存数据。我非常肯定,检修方式将会进行重大改革。这是诚实的路线吗? – TheCodingArt 2013-03-22 16:47:23
嗯...实际上没有。比方说,如果你只为这一个代码做一次。但是它比使用NSFetchedResultController更具挑战性。我认为如果仅仅是发布日期,你可以用NSPredicate做一些“简单”的事情。这可以适用于最多100/200条目;但是如果你有,比方说10000个条目,这种技术会很慢。所以是的,你可以使用简单的NSPredicate。 – 2013-03-25 08:19:34