• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

iphone - NSUserDefaults 无法保存 NSMutableDictionary

[复制链接]
菜鸟教程小白 发表于 2022-12-13 00:25:03 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我正在尝试使用此代码将 NSMutableDictionary 保存到 NSUserDefaults:

NSUserDefaults *def = [NSUserDefaults standardUserDefaults];
NSMutableDictionary *repositoryData = [[NSMutableDictionary alloc] init];

[repositoryData setObject:personData forKey"persondata"];

[def setObject:repositoryData forKey"kUserRepository"];
[def synchronize];
[repositoryData removeAllObjects];
[repositoryData release];

但是我收到了这个消息:

    [NSUserDefaults setObject:forKey:]: Attempt to insert non-property value '{
    persondata = "<erson: 0x1ed57e70>";
}' of class '__NSDictionaryM'.  Note that dictionaries and arrays in property lists must also contain only property values.

而且 Person 类也有 NSCoding:

人.h

    @interface Person : NSObject <NSCoding> {
    NSString *name;
    NSString *email;
    NSString *phoneNumber;
    NSString *gender;

    int age;
}

@property (nonatomic, retain) NSString *name;
@property (nonatomic, retain) NSString *email;
@property (nonatomic, retain) NSString *phoneNumber;
@property (nonatomic, retain) NSString *gender;
@property (assign) int age;


@end

人.m

    @implementation Person
@synthesize name,email,phoneNumber,age,gender;

#pragma mark
#pragma mark NSCoder

- (void)encodeWithCoderNSCoder *)encoder{
    [encoder encodeObject:self.name forKey"username"];
    [encoder encodeObject:self.email forKey"useremail"];
    [encoder encodeObject:self.phoneNumber forKey"userphonenumber"];
    [encoder encodeObject:self.gender forKey"usergender"];

    [encoder encodeInt:self.age forKey"userage"];
}

- (id)initWithCoderNSCoder *)decoder {
    if(self = [super init]){

        self.name = [decoder decodeObjectForKey"username"];
        self.email = [decoder decodeObjectForKey"useremail"];
        self.phoneNumber = [decoder decodeObjectForKey"userphonenumber"];
        self.gender = [decoder decodeObjectForKey:@"usergender"];

        self.age = [decoder decodeIntForKey:@"userage"];
    }
    return self;
}

@end

知道为什么会这样吗?



Best Answer-推荐答案


对于什么类型的数据可以同步到 NSDictionary 中的 NSUserDefaults 有非常具体的限制。这些包括 NSString、NSNumber、NSData、NSArray 和 NSDictionary。在存储到 NSUserDefaults 之前,使用您的 NSCoder 方法序列化为 NSData(使用 NSKeyedArchiver)。

另外,看看 this

关于iphone - NSUserDefaults 无法保存 NSMutableDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14282892/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap