2017-01-03 4 views
-2

Я хочу, чтобы сохранить NSMutableDictionary в NSUserDefaults затем получить сообщение об ошибке:NSUserDefaults encodeWithCoder непризнанным селектор послал к экземпляру

NSUserDefaults encodeWithCoder unrecognized selector sent to instance. Fatal Exception: NSInvalidArgumentException [NSUserDefaults encodeWithCoder:]: unrecognized selector sent to instance 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"]; 
} 
+0

Обновите свой вопрос на актуальном, уместном коде. – rmaddy

+0

NSUserDefaults * shared2 = [[NSUserDefaults alloc] initWithSuiteName: @ "groupName"]; NSMutableData * data1 = [[NSMutableData alloc] init]; NSKeyedArchiver * archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData: data1]; [архиватор encodeObject: shareDic forKey: @ "shareDic"]; [архивирование завершеноEncoding]; если (данные1! = Nil) { [общий2 комплектObject: данные1 дляKey: @ "dicFitnessData"]; } –

+2

Как я уже сказал, обновите свой вопрос. Не отправляйте код в комментариях. – rmaddy

ответ

0

Вы должны реализовать протокол 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; 
     } 
+0

Могу ли я использовать одноэлементный класс для этого –

+0

да, вы можете его использовать. – Ankur