我又和 CoreData 打架了,我需要你的帮助:P
我正在写一个 RSS 阅读器。设计基于使用 libxml2 库的 Apple TopSongs 示例。
当我的应用程序启动时,我正在检查最后一次更新是什么时候。如果是超过 1 小时前,我会删除当前的持久存储并再次下载所有内容。
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]
我希望看到空表,但数据仍然存在。
这怎么可能 ?我删除了商店,重新获取并重新加载了数据。
我究竟做错了什么?