gpt4 book ai didi

iphone - 将 NSMutableArray 保存到 NSUserDefaults 的最佳方法是什么?

转载 作者:行者123 更新时间:2023-12-03 18:50:28 25 4
gpt4 key购买 nike

我有一个名为 Occasion 的自定义对象,定义如下:

#import <Foundation/Foundation.h>


@interface Occasion : NSObject {

NSString *_title;
NSDate *_date;
NSString *_imagePath;

}

@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSDate *date;
@property (nonatomic, retain) NSString *imagePath;

现在我有一个 NSMutableArray 的场合,我想将其保存到 NSUserDefaults 中。我知道这是不可能的,所以我想知道哪种方法最简单?如果序列化是答案,那么如何实现呢?因为我阅读了文档,但无法理解它的完整工作方式。

最佳答案

您应该使用NSKeyedArchiver之类的东西将数组序列化为NSData,将其保存到NSUserDefaults,然后使用NSKeyedUnarchiver 稍后反序列化它:

NSData *serialized = [NSKeyedArchiver archivedDataWithRootObject:myArray];
[[NSUserDefaults standardUserDefaults] setObject:serialized forKey:@"myKey"];

//...

NSData *serialized = [[NSUserDefaults standardUserDefaults] objectForKey:@"myKey"];
NSArray *myArray = [NSKeyedUnarchiver unarchiveObjectWithData:serialized];

您需要在 Occasion 类中实现 NSCoding 协议(protocol),并正确保存各种属性才能使其正常工作。欲了解更多信息,请参阅Archives and Serializations Programming Guide 。执行此操作不应超过几行代码。像这样的东西:

- (void)encodeWithCoder:(NSCoder *)coder {
[super encodeWithCoder:coder];

[coder encodeObject:_title forKey:@"_title"];
[coder encodeObject:_date forKey:@"_date"];
[coder encodeObject:_imagePath forKey:@"_imagePath"];
}

- (id)initWithCoder:(NSCoder *)coder {
self = [super initWithCoder:coder];

_title = [[coder decodeObjectForKey:@"_title"] retain];
_date = [[coder decodeObjectForKey:@"_date"] retain];
_imagePath = [[coder decodeObjectForKey:@"_imagePath"] retain];

return self;
}

关于iphone - 将 NSMutableArray 保存到 NSUserDefaults 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7743450/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com