Приложение аварийно завершает работу на NSUserDefaults setObject: forKey:

При настройке объекта на NSUserDefaults мое приложение случайно падает в iOS 12. Ниже приведен мой код, в котором происходит сбой.

shared2 = [[NSUserDefaults alloc]initWithSuiteName:@"group.AppName"];

NSData *datashare = [NSKeyedArchiver archivedDataWithRootObject:_sharedData];

[shared2 setObject:datashare forKey:@"dicForToday"];

Не получать журналы сбоев, так как это происходит случайным образом

Частота этого сбоя намного больше на iOS 12.


person Amol Gunjal    schedule 11.10.2018    source источник
comment
Что заставляет вас думать, что это код, который дает сбой? Похоже на сетевую ошибку (см. ссылки на CFNetwork).   -  person Stephen Darlington    schedule 11.10.2018
comment
@ Стивен Дарлингтон, я уверен, что этот сбой не связан с проблемой сети, этот журнал был для чего-то другого, я также отредактировал вопрос.   -  person Amol Gunjal    schedule 12.10.2018


Ответы (2)


Обычно вы можете использовать этот метод для сохранения данных Post Method:

 [[NSUserDefaults standardUserDefaults] setObject:object forKey:@"somename"];

Получить метод:

NSMutableDictionary *dicCover = [[NSUserDefaults standardUserDefaults] valueForKey:@"somename"];

некоторое время, словарь или массив или неправильное форматирование, которое мы можем использовать для получения ваших данных, подобных этому, чтобы использовать NSUserdefault Use Achive:

NSData *data = [NSKeyedArchiver archivedDataWithRootObject:arrayUsers];
    [[NSUserDefaults standardUserDefaults] setObject:data forKey:@"somename"];

Получить:

NSData *usersData = [[NSUserDefaults standardUserDefaults] valueForKey:@"somename"];
    NSMutableArray *redirectionDic = [NSKeyedUnarchiver unarchiveObjectWithData:usersData];
person Developer1205    schedule 11.10.2018
comment
Не используйте -[NSUserDefaults synchronize] Из документации Apple… этот метод не нужен, и его не следует использовать. - person Ashley Mills; 11.10.2018
comment
… в iOS 12 и более поздних версиях, где это не работает. Для обратной совместимости вам все равно нужно будет вызывать это в iOS 11 и ниже, поэтому не помешает сохранить его, если вы ориентируетесь на не последнюю версию. - person saagarjha; 12.10.2018
comment
@ Developer1205, я делаю то же самое, что и в вопросе. - person Amol Gunjal; 12.10.2018

  NSUserDefaults *myDefaults = [[NSUserDefaults alloc]
                                  initWithSuiteName:keyChainGroup];
    [myDefaults setObject:userInfo forKey:key];

Попробуй это

person Utkarsh Joshi    schedule 11.10.2018
comment
Я сохраняю пользовательский объект в userDefaults, архивируя пользовательский объект класса в NSData. Значит, нам это нужно. - person Amol Gunjal; 11.10.2018
comment
В моем случае я храню объект JSON внутри своей группы цепочки для ключей, например NSArray* userInfo = [command.arguments objectAtIndex:2]; NSUserDefaults *myDefaults = [[NSUserDefaults alloc] initWithSuiteName:keyChainGroup]; [myDefaults setObject:userInfo forKey:key]; - person Utkarsh Joshi; 11.10.2018