【问题标题】:Storing custom objects to NSMutableArray, then storing this NSMutableArray to NSUserDefaults将自定义对象存储到 NSMutableArray,然后将此 NSMutableArray 存储到 NSUserDefaults
【发布时间】:2011-09-18 05:04:15
【问题描述】:

我想在 NSMutableArray 中存储一些自定义对象,然后将此 NSMutableArray 存储到 NSUserDefaults。自定义对象如下所示:

@interface myCustomClass:NSObject
{
    NSString *string1;
    NSString *string2;
    NSArray *array;
    NSURL   *URL;
}
@end

我查看了开发文档,了解到 NSUserDefaults 只支持一些类型,例如 NSData、NSDate、NSString、NSArray、NSDictionary。我已经搜索了我的问题的答案一段时间,但没有得到解决方案。谁能告诉我如何将上面列出的自定义对象保存到 NSMutableArray,然后将此数组存储到 NSUserDefaults,以及如何检索此可变数组?提前非常感谢。

【问题讨论】:

标签: objective-c


【解决方案1】:

可以使用 NSUserDefaults 缓存的对象必须是属性列表。如果您真的想使用 NSUserDefaults 来缓存这些,那么您必须首先实现一个方法,该方法返回重新创建对象所需的所有属性。这意味着您的对象的属性列表表示形式,例如 NSDictionary。从序列化/反序列化的角度考虑。对于您的情况,您必须确保您的 NSArray ivar 反过来只包含属性列表。如果您只能使用 NSString 重新创建 NSURL,则改为保存 NSString。你看它变得越来越复杂了!

更简单的方法是在您的自定义类中实现 NSCoding 协议,并使用 NSKeyedArchiver 和 NSKeyedUnarchiver 保存/检索您的对象或 NSArray 对象。要实现 NSCoding 协议,你必须只实现两个方法initWithCoder:encodeWithCoder:

【讨论】:

  • 非常感谢您的建议,mkumaro。我没有必要使用 NSUserDefaults。相反,只要我可以将填充了我的自定义对象的 NSMutableArray 保存到设备中,然后我可以稍后从设备中检索这个 NSMutableArray,那就足够了。所以,我尝试过使用 NSCoding 和 NSKeyedArchiver/NSKeyedUnarchiver。现在可以了。再次感谢 mkumaro。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-28
  • 2013-04-16
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多