所以這是我一直在經歷的個人挑戰,我會很樂意幫助。從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