gpt4 book ai didi

ios - 为什么 NSUserDefaults 无法在 iOS 中保存 NSMutableDictionary?

转载 作者:IT老高 更新时间:2023-10-28 12:17:55 25 4
gpt4 key购买 nike

我想在 NSUserDefaults 中保存一个 NSMutableDictionary 对象。 NSMutableDictionary 中的键类型是 NSString,值类型是 NSArray,其中包含实现 NSCoding 的对象列表>。每个文档,NSStringNSArray 都符合 NSCoding

我收到此错误:

[NSUserDefaults setObject: forKey:]: Attempt to insert non-property value.... of class NSCFDictionary.

最佳答案

我发现了一种替代方法,在保存之前,我使用 NSKeyedArchiver 对根对象(NSArray 对象)进行编码,它以 NSData 结尾。然后使用 UserDefaults 保存 NSData

当我需要数据时,我读出NSData,并使用NSKeyedUnarchiverNSData 转换回对象。

这有点麻烦,因为我每次都需要与 NSData 进行转换,但它确实有效。

以下是每个请求的一个示例:

保存:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *arr = ... ; // set value
NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arr];
[defaults setObject:data forKey:@"theKey"];
[defaults synchronize];

加载:

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSData *data = [defaults objectForKey:@"theKey"];
NSArray *arr = [NSKeyedUnarchiver unarchiveObjectWithData:data];

数组中的元素实现

@interface CommentItem : NSObject<NSCoding> {
NSString *value;
}

然后在CommentItem的实现中,提供了两个方法:

-(void)encodeWithCoder:(NSCoder *)encoder
{
[encoder encodeObject:value forKey:@"Value"];
}

-(id)initWithCoder:(NSCoder *)decoder
{
self.value = [decoder decodeObjectForKey:@"Value"];
return self;
}

谁有更好的解决方案?

谢谢大家。

关于ios - 为什么 NSUserDefaults 无法在 iOS 中保存 NSMutableDictionary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/471830/

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