ошибка: попытка поместить стек в нечитаемую память по адресу: 0x7ffeeafe2af0: использование userDefaults - PullRequest
0 голосов
/ 05 апреля 2019

Я делаю проект в target-c, и мне нужно сохранить некоторые значения в userDefaults.Я уже сделал то же самое в том же проекте.Это работало нормально, но теперь я пытаюсь добавить некоторые значения в userDefaults, показывая ошибку при получении любых данных из userDefaults.Я добавляю данные как

  NSString *  totalBitValue = [NSString stringWithFormat:@"%.6f Bit",
                           totalValue /
                                 [[[NSUserDefaults standardUserDefaults] objectForKey:@"Bit"] floatValue]];

  [[NSUserDefaults standardUserDefaults]setObject:totalBitValue forKey:@"totalBTCValue"];
  [[NSUserDefaults standardUserDefaults]setFloat:totalUSDValue forKey:@"totalUsedValue"];

  [[NSUserDefaults standardUserDefaults] synchronize];

и ошибку как

ошибка: Попытка поместить стек в нечитаемую память по адресу: 0x7ffeeafe2af0

Я получил ошибку в следующей строке:

 if( [[NSUserDefaults standardUserDefaults] objectForKey:@"CoinValue"] != nil) {
    [[self ValueLabel] setText: [NSString stringWithFormat:@"%@", [[NSUserDefaults standardUserDefaults] objectForKey:@"CoinValue"] ]];
    }

Любой может мне помочь. Заранее спасибо

1 Ответ

2 голосов
/ 05 апреля 2019

Причина вашей проблемы в том, что ваш код получает рекурсию.

Как я понимаю, вы использовали NSNotificationCenter для ключа наблюдателя NSUserDefaultsDidChangeNotification. Поэтому, когда NSUserDefaults обновляется, он запускает метод defaultsChanged. Но внутри него вы продолжаете изменять NSUserDefaults, устанавливаете новое значение для totalBTCValue и totalUSDValue (как мне кажется), что вызывает повторный вызов defaultsChanged и приводит к рекурсии.

Чтобы устранить проблему, не следует обновлять NSUserDefaults внутри defaultsChanged, метод

...