gpt4 book ai didi

ios - 在 NSUserDefaults 中保存和检索对象数组

转载 作者:行者123 更新时间:2023-11-29 05:09:00 25 4
gpt4 key购买 nike

我创建了一个自定义对象“类”,它保存数组的数据。

注意:“data”是一个 NSMutableArray

- (IBAction)addNewTodo:(id)sender {

DataHolder *dataHolder = [[DataHolder alloc] init];

dataHolder.todo = _inputText.text;
dataHolder.priority = @"%d", prior;
dataHolder.date = [dateFormatter stringFromDate:[NSDate date]];

[data addObject:dataHolder];

NSLog(@"%@", [data objectAtIndex:0]);

[self saveInUserDefaults];
}


- (void) saveInUserDefaults{
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:data requiringSecureCoding:YES error:nil];

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:data forKey:@"data"];
[defaults synchronize];


- (void) retrieveUserDefaults{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
data = [NSKeyedUnarchiver unarchiveObjectWithData:[userDefaults objectForKey:@"data"]];

NSLog(@"%@", [data objectAtIndex:0]);
}

保存数组数据的类。

#import "DataHolder.h"

@implementation DataHolder

@synthesize todo;
@synthesize date;
@synthesize priority;

@end

所以每次我运行“retrieveUserDefaults”方法时,应用程序都会打印出来:

...projlab[31828:5746912] (null)

将数据添加到数组后的输出是:

...projlab[31828:5746912] < DataHolder: 0x600001329540>

那么如何以正确的方式保存和检索对象数组呢?

最佳答案

如果我没记错的话,你只需要修改:

data = [NSKeyedUnarchiver unarchiveObjectWithData:[userDefaults objectForKey:@"data"]];

data = [userDefaults objectForKey:@"data"];

如果你想迭代,然后将数据转换为 NSMutableArray

编辑

您能否使用 unarchivedObjectOfClass 上的错误参数来验证保存时没有错误?,其中一个选项是您的对象未使用 NSSecureCoding 协议(protocol)并且失败保存前

关于ios - 在 NSUserDefaults 中保存和检索对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59865323/

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