使用Core Data和NSManagedObject保存列表

时间:2013-07-18 21:21:11

标签: iphone ios objective-c sqlite core-data

我正在寻找有关如何管理列表保存应用程序的数据的一些建议。基本上,我有两种对象类型:ListListItemList对象如下所示:

@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的数组中,但是我设想执行“按创建日期,类型或名称对列表进行排序”等操作,我觉得好像我会遇到困难。所以,在继续自己编写这些方法之前,我想向大家提出一些问题:学习如何使用核心数据对我有意义吗?它真的能为我提供更好的功能/更可靠的持久化数据方式吗?

提前感谢您的建议。

2 个答案:

答案 0 :(得分:2)

如果您的应用主要关注的是基于这些对象存储列表,我会说它可能值得研究核心数据。它将允许您根据标准更轻松地获取多个列表(如果您决定稍后执行此类操作),并且只是让您可以更好地控制对存储数据的操作。

有一些工具可以帮助您轻松过渡到核心数据,即mogeneratorMagical Record

您需要的核心数据模型非常基础,并且在ListItem和List之间建立多对一关系将非常适合您正在进行的操作。

祝你好运!

答案 1 :(得分:1)

绝对选择核心数据。您将看到这将产生更强大和可扩展的应用程序。

最重要的缺点是你只能保存整个列表,效率非常低。最终你会耗尽内存。使用Core Data,您可以进行增量更新。

其次,NSUserDefaults基础设施在类型方面不是很灵活,而且真正意味着不同的东西。您不是存储首选项,而是存储数据。

第三,正如您已经指出的那样,排序和过滤既会对资源造成压力,又需要大量编码。您可以非常有效地对内存进行排序和过滤,但不会产生非常易维护的代码。