【问题标题】:NSUserDefaults encodeWithCoder unrecognized selector sent to instanceNSUserDefaults encodeWithCoder 无法识别的选择器发送到实例
【发布时间】:2017-01-03 06:48:17
【问题描述】:

我想将NSMutableDictionary 保存到NSUserDefaults 然后得到错误:

NSUserDefaults encodeWithCoder 无法识别的选择器发送到实例。 致命异常:NSInvalidArgumentException [NSUserDefaults encodeWithCoder:]:无法识别的选择器发送到实例 0x17544a080

这是我的代码:

NSUserDefaults *shared2 = [[NSUserDefaults alloc]initWithSuiteName:@"AppGroupName"];
NSMutableData *data1 = [[NSMutableData alloc]init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data1];
[archiver encodeObject:shareDic forKey: @"shareDic"];
[archiver finishEncoding];

if (data1 !=nil)
{
    [shared2 setObject:data1 forKey:@"dicFitnessData"];
}

【问题讨论】:

  • 用实际的相关代码更新您的问题。
  • NSUserDefaults *shared2 = [[NSUserDefaults alloc]initWithSuiteName:@"groupName"]; NSMutableData *data1 = [[NSMutableData alloc]init]; NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:data1]; [存档编码对象:shareDic forKey:@“shareDic”]; [存档完成编码]; if (data1 !=nil) { [shared2 setObject:data1 forKey:@"dicFitnessData"]; }
  • 正如我所说,更新您的问题。不要在 cmets 中发布代码。
  • 在您的问题中向我们展示一些代码。
  • 我只归档字典而不归档 NSUserDefaults

标签: ios objective-c nsuserdefaults nskeyedarchiver


【解决方案1】:

你需要实现nscoding协议。

    - (void)encodeWithCoder:(NSCoder *)aCoder{
      [aCoder encodeObject:self.yourpoperty forKey:@"Your_KEY"];
      }

    - (id)initWithCoder:(NSCoder *)aDecoder{
       if(self = [super init]){
         self.yourpoperty = [aDecoder decodeObjectForKey:@"Your_KEY"];
        }
        return self;
      }

【讨论】:

  • 我可以使用单例类吗
猜你喜欢
  • 1970-01-01
  • 2017-02-14
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2019-08-28
  • 2012-07-24
相关资源
最近更新 更多