我與CoreData再次戰鬥,我需要你的幫助:PCoreData重載數據到UITableView的問題
我寫一個RSS閱讀器。 設計基於使用libxml2庫的Apple TopSongs示例。
當我的應用程序啓動時,我正在檢查什麼時候是最後一次更新。如果超過1小時前刪除當前的Persistent商店並再次下載所有內容。
if ([[NSFileManager defaultManager] fileExistsAtPath:self.persistentStorePath]) {
NSError *error = nil;
BOOL oldStoreRemovalSuccess = [[NSFileManager defaultManager] removeItemAtPath:self.persistentStorePath error:&error];
NSAssert3(oldStoreRemovalSuccess, @"Unhandled error adding persistent store in %s at line %d: %@", __FUNCTION__, __LINE__, [error localizedDescription]);
}
我可以看到本地的sql文件被刪除了。
現在我正在創建一些NSOperations,從後臺下載源中的信息。
到目前爲止,一切都很好。
和每個RSS源一樣,有一個更新按鈕,它會檢查更改並更新coreData。 對於初學者我決定我將刪除一切,並重新下載一切(不知道我知道,但RSS飼料沒有GUID,我需要實現一個哈希函數來判斷是否有任何變化)。
所以我在做什麼,基本上調用與上述相同的代碼刪除商店... 重新下載所有的RSS源再次(在第一次被加載的應用程序相同的邏輯)
我重裝了表,但我仍然可以在tableView上看到相同的數據,一切都保持不變。
我決定走得更遠,並且在不下載內容的情況下刪除商店。
if ([[NSFileManager defaultManager] fileExistsAtPath:app.persistentStorePath]) {
NSError *error = nil;
BOOL oldStoreRemovalSuccess = [[NSFileManager defaultManager] removeItemAtPath:app.persistentStorePath error:&error];
NSAssert3(oldStoreRemovalSuccess, @"Unhandled error adding persistent store in %s at line %d: %@", __FUNCTION__, __LINE__, [error localizedDescription]);
}
[self.managedObjectContext save:&err];
[self.fetchedResultsController performFetch:&error];
[self.tableView reloadData]
我期望看到空表,但數據仍然存在。
這怎麼可能?我刪除了商店,重新提取並重新加載數據。
我在做什麼錯了?
難道reloadData對你的工作? – Ladislav 2011-03-01 10:39:48
有一個完美的答案。 刪除持續單位,頻繁是一種不好的做法。只需從現有的持久性單元中刪除數據並添加最新的數據即可。 – 2011-03-01 11:31:38
我從Apple示例中學習,他們在TopSongs示例中編寫了「 //刪除舊商店;比首先刪除每個對象 //首先測試現有商店」更容易。 – djTeller 2011-03-01 11:38:06