Сегодня я столкнулся с довольно запутанной проблемой:NSUserDefaults setObject: forKey deadlocks?
Когда мое приложение запускается, я загружаю некоторые вещи, и после разбора ответов я записываю данные в NSUserDefaults. Теперь это работало нормально, пока я недавно не обнаружил, что иногда мой весь пользовательский интерфейс замерзает и не разморозит, пока я не перезапущу приложение. Когда я попал приостановить выполнение программка в отладчике я получаю:
В документации сказано, что NSUserDefaults является поточно и от того, что я могу видеть никаких других потоков не пытаются получить доступ по умолчанию пользовательские ...
Любые идеи о том, как разрешить/продолжить отладку, были бы весьма полезны!
Заранее благодарен!
код, который вызывает проблему:
Это называется после того, как я получу ответ на WebService:
+ (void)updateWithData:(NSData *)data
{
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSError *error;
NSArray *decodedData;
if (data) {
decodedData = [NSPropertyListSerialization propertyListWithData:data
options:NSPropertyListImmutable
format:NULL
error:&error];
}
if (!error && decodedData) {
[userDefaults setObject:decodedData forKey:kUserDataUserDefaultsKey];
}
else{
NSLog(@"%@", error.localizedDescription);
}
}
Можете ли вы предоставить код? 'NSUserDefaults' является потокобезопасным, потому что, когда вызывается' setValue: forKey: ', он блокирует доступ к словарю, содержащему значения. – tailec
Вы нашли причину этой проблемы? При одновременном использовании NSUserDefaults я сталкиваюсь с подобными взаимоблокировками. –
Я сталкиваюсь с аналогичной проблемой, моя специфична для устройства. Нет проблем с симулятором и большинством других телефонов, но с iPhone 5. Я думаю, что это проблема с синхронизацией. Если я могу отложить задержку где-нибудь, чтобы ее очистить – ahalls