2012-09-28 123 views
1

我有一个应用程序与服务器通信以获取当前用户的一些项目(Item类)并将其存储。到现在为止还挺好。在核心数据应用程序中建模短期对象

我想实现搜索,实质上是返回一组Item对象,但显然我不想坚持每一个搜索结果。另一个用例是服务器API具有不同的端点,比如推荐/新/即将/返回相同的Item对象,但是在不同的上下文中,所以我想以某种方式区分它们。

我的第一个想法是使用丢弃的托管上下文,从API中加载对象,执行获取以及在用户完成时只是销毁上下文。一般来说这是个好主意吗?它节省了代码,因为我的大多数VC已经与核心数据进行了交流。

+1

我有一个很好的朋友,谁是真正的数据库大师,而他正是这样做的。他将核心数据用于他所有的数据存储,并经常使用不必要的上下文。我在我的应用程序中使用它来存储图像,并且我总是在重新启动时抛弃它,因为我不想担心腐败(不是我见过的)或迁移(并且我会不时修改它) 。 –

回答

1

而不是抛弃核心数据的整个美妙的基础设施,你应该利用它来实现你的目的。

  • 将时间戳属性添加到您的实体并使用它来选择性地显示搜索结果,甚至从旧项目中清除您的店铺。

  • 为您的实体添加类别属性并在搜索时按类别过滤。

两者都可以用NSPredicate实现您添加到您的NSFetchRequest。例如:

fetchRequest.predicate = [NSPredicate predicateWithFormat: 
    @"timestamp > %@", [[NSDate date] dateByAddingTimeInterval:numberOfSeconds]]; 

fetchRequest.predicate = [NSPredicate predicateWithFormat: 
    @"category = %@", @"new"]; 
+0

可以肯定的是,你是否建议我将搜索结果保存在持久存储中,并使用它们,除非它们太旧? –

+0

没错。你可以决定他们何时到期。 – Mundi

+0

这是一个有趣的方法。尽管我的服务器具有搜索结果的排名算法,但我不确定如何将其转换为我的CD设置,以及我是否应该。 –