【问题标题】:How to save a multi-leveled custom object to NSUserDefault's?如何将多级自定义对象保存到 NSUserDefault 的?
【发布时间】:2013-08-31 00:07:24
【问题描述】:

我希望将精心制作的多层次自定义对象保存到 NSUserDefaults 中。我的自定义类设置如下:

  • 讲师
    • @property (strong, nonatomic) NSString *instructorName;
    • @property (strong, nonatomic) NSMutableArray *classes; // 类对象的数组
  • 类
    • @property (strong, nonatomic) NSString *className;
    • @property (strong, nonatomic) NSMutableArray *students; // 学生对象的数组
  • 学生
    • @property (strong, nonatomic) NSString *studentName;
    • @property (nonatomic) NSUInteger studentNumber;
    • @property(非原子)NSInteger studentMoney;

我需要将顶级“Instructor”对象保存到 NSUserDefault 中,以便我可以访问它下面的整个数据层。我已经引用了this post,但我需要更多帮助来解决它。在那个例子中,他展示了两个不同的类和一些与之配套的方法。这些方法本身是否写入了不同的自定义类?我将如何在我的应用程序中实际使用它?

我需要保存一个“Instructor”对象,它有一个类数组,其中填充了一组学生。如何将一个讲师对象保存到 NSUserDefault 中,以便我可以检索它并重新加载它以供使用?

【问题讨论】:

  • 你可能会重新考虑这是否属于 NSUserDefaults。这真的是应用偏好设置吗?或用户数据。
  • 您需要在用户默认值中编写您要保存的对象的编码器和解码器。因此,在保存数据时,将对其进行编码以进行保存,并对其进行解码以重新获取数据。

标签: ios objective-c nsuserdefaults


【解决方案1】:

所有对象(Instructor、Class 和 Student)都需要采用和实现 NSCoding 协议。见this post for an implentation。正如@uchuugaka 所说,听起来 NSUserDefaults 不是存储这些数据的地方。

您仍然可以将数据序列化到磁盘,但只需将其写入单独的文件即可。 Apple 的 Archives and Serializations Programming Guide 是学习此方法基础知识的好书。

如果您要保存的对象图会更复杂,并且您需要搜索和查询对象图,例如找到 studentMoney >= 50 且 lastName 以“A”开头的学生人数,然后您可能需要查看Core Data。但是,请注意,Core Data 是一个高级框架,因此它确实有相当长的学习曲线。

【讨论】:

  • 感谢您的回复!如果您不相信 NSUserDefault 是存储此数据的地方,您能否推荐一种保存数据的好方法?谢谢!
  • 非常感谢,安德鲁!
猜你喜欢
  • 2016-12-05
  • 1970-01-01
  • 2016-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多