我正在寻找有关如何管理列表保存应用程序的数据的一些建议。基本上,我有两种对象类型:List
,ListItem
。 List
对象如下所示:
@interface List : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSMutableArray *contents;
@property (nonatomic, copy) NSString *completed;
@property (nonatomic, strong) NSDate *creationDate;
-(id)initWithName:(NSString *)name contents:(NSMutableArray *)contents completed:(NSString *)completed date:(NSDate *)creationDate;
A ListItem
:
@interface ListItem : NSObject
@property (nonatomic, copy) NSString *name;
@property (nonatomic, copy) NSString *completed;
@property (nonatomic, strong) NSDate *creationDate;
-(id)initWithName:(NSString *)name completed:(NSString *)completed date:(NSDate *)date;
@end
目前,我将这些列表保存在NSUserDefaults
的数组中,但是我设想执行“按创建日期,类型或名称对列表进行排序”等操作,我觉得好像我会遇到困难。所以,在继续自己编写这些方法之前,我想向大家提出一些问题:学习如何使用核心数据对我有意义吗?它真的能为我提供更好的功能/更可靠的持久化数据方式吗?
提前感谢您的建议。
答案 0 :(得分:2)
如果您的应用主要关注的是基于这些对象存储列表,我会说它可能值得研究核心数据。它将允许您根据标准更轻松地获取多个列表(如果您决定稍后执行此类操作),并且只是让您可以更好地控制对存储数据的操作。
有一些工具可以帮助您轻松过渡到核心数据,即mogenerator和Magical Record。
您需要的核心数据模型非常基础,并且在ListItem和List之间建立多对一关系将非常适合您正在进行的操作。
祝你好运!答案 1 :(得分:1)
绝对选择核心数据。您将看到这将产生更强大和可扩展的应用程序。
最重要的缺点是你只能保存整个列表,效率非常低。最终你会耗尽内存。使用Core Data,您可以进行增量更新。
其次,NSUserDefaults基础设施在类型方面不是很灵活,而且真正意味着不同的东西。您不是存储首选项,而是存储数据。
第三,正如您已经指出的那样,排序和过滤既会对资源造成压力,又需要大量编码。您可以非常有效地对内存进行排序和过滤,但不会产生非常易维护的代码。