将自定义对象存储到 NSMutableArray,然后将此 NSMutableArray 存储到 NSUserDefaults

Posted

技术标签:

【中文标题】将自定义对象存储到 NSMutableArray,然后将此 NSMutableArray 存储到 NSUserDefaults【英文标题】:Storing custom objects to NSMutableArray, then storing this NSMutableArray to 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,以及如何检索此可变数组?提前非常感谢。

【问题讨论】:

你读过this吗? Storing custom objects in an NSMutableArray in NSUserDefaults的可能重复 【参考方案1】:

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

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

【讨论】:

非常感谢您的建议,mkumaro。我没有必要使用 NSUserDefaults。相反,只要我可以将填充了我的自定义对象的 NSMutableArray 保存到设备中,然后我可以稍后从设备中检索这个 NSMutableArray,那就足够了。所以,我尝试过使用 NSCoding 和 NSKeyedArchiver/NSKeyedUnarchiver。现在可以了。再次感谢 mkumaro。

以上是关于将自定义对象存储到 NSMutableArray,然后将此 NSMutableArray 存储到 NSUserDefaults的主要内容,如果未能解决你的问题,请参考以下文章

将自定义对象存储到 Android 内部存储的最佳方式?

如何将自定义对象的集合存储到 user.config 文件中?

将自定义分配的对象存储在数组中。内存管理

Azure Cosmos SQL API - 如何将自定义对象存储为 @PartitionKey

在使用 Hive 进行颤振时,您如何将自定义对象从 POST 响应正文添加到框?

将自定义元数据设置为 Google Cloud Storage 中的对象