说我正在构建一个获取特定网站RSS源的应用程序。用户可能会要求为纽约时报撰写文章,然后完成并索取波士顿环球报的文章。
将它存储在Core Data中是有意义的(如果我错了,请纠正我),因为我希望能够轻松搜索,并且使用NSFetchedResultsController
我可以轻松地呈现数据。
但是,我如何处理我不想永远保存的事实呢?在上面的例子中,一旦用户要求The Boston Globe,我就不再需要将数据存储在纽约时报上了,当NSFetchedResultsController
请求显示的内容时,它实际上很烦人。 #39; s还在商店里。
答案 0 :(得分:1)
使用Core Data进行临时存储时遇到的一个问题是清理。核心数据不提供批量删除行的API,例如,通过指定NSPredicate
,强制您在删除行时使用循环。
但是,使用NSFetchedResultsController
的便利性可能非常值得删除:this answer提供了一种以编程方式删除所有数据的解决方案(建议删除基础文件的另一个答案可能无效)在最新版本的iOS中。
如果您不介意编写一些SQL查询,请运行" raw" SQLite,不使用Core Data层,可以提供更清晰的替代方案,因为您可以使用非常简单的SQL DML命令将删除卸载到Backstore上。
答案 1 :(得分:0)
如果您不想保存到磁盘,则应该为NSPersistentStoreCoordinator使用内存存储选项NSInMemoryStore
而不是Sqlite。
答案 2 :(得分:0)
使用网络开发的新词我不会为每个用户会话创建一个SQL表,然后在他/她退出站点时删除它。这在CPU方面会很昂贵。用这些术语来思考核心数据。将其用于持久数据。
您的应用程序的某些方面不是很清楚,但总的来说我宁愿使用NSDictionary来存储数据。然后在触发搜索时将该数据移动到NSArray,该NSArray适用于NSPredicate。
现在,如果您的案例是特定的,并且您认为Core Data会为您的应用添加性能或UX值,那么您可以在Core Data中插入对象并在applicationDidEnterBackground
或applicationWillTerminate
时删除它们。
[NSEntityDescription insertNewObjectForEntityForName:@"feed" inManagedObjectContext:context];
[context deleteObject:aManagedObject];
这是我的2美分。