gpt4 book ai didi

objective-c - 保存和恢复自定义对象数组

转载 作者:太空狗 更新时间:2023-10-30 03:27:12 24 4
gpt4 key购买 nike

我有一个自定义对象的 NSArray,我想保存和恢复。这可以用 NSUserDefaults 完成吗?

最佳答案

您仍然可以使用 NSUserDefaults 如果您将数组存档到 NSData

要归档数组,您可以使用以下代码:

[[NSUserDefaults standardUserDefaults] setObject:[NSKeyedArchiver archivedDataWithRootObject:myArray] forKey:@"mySavedArray"];

然后为了在数组中加载自定义对象,您可以使用以下代码:

NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *savedArray = [currentDefaults objectForKey:@"mySavedArray"];
if (savedArray != nil)
{
NSArray *oldArray = [NSKeyedUnarchiver unarchiveObjectWithData:savedArray];
if (oldArray != nil) {
customObjectArray = [[NSMutableArray alloc] initWithArray:oldArray];
} else {
customObjectArray = [[NSMutableArray alloc] init];
}
}

确保检查从用户默认值返回的数据不是nil,因为这可能会使您的应用崩溃。

您需要做的另一件事是使您的自定义对象符合 NSCoder 协议(protocol)。您可以使用 -(void)encodeWithCoder:(NSCoder *)coder-(id)initWithCoder:(NSCoder *)coder 方法执行此操作。


编辑。

这是您可以在 -(void)encodeWithCoder:(NSCoder *)coder-(id)initWithCoder:(NSCoder *)coder 中放入的示例方法。

- (void)encodeWithCoder:(NSCoder *)coder;
{
[coder encodeObject:aLabel forKey:@"label"];
[coder encodeInteger:aNumberID forKey:@"numberID"];
}

- (id)initWithCoder:(NSCoder *)coder;
{
self = [[CustomObject alloc] init];
if (self != nil)
{
aLabel = [coder decodeObjectForKey:@"label"];
aNumberID = [coder decodeIntegerForKey:@"numberID"];
}
return self;
}

关于objective-c - 保存和恢复自定义对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3648558/

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