错误:尝试将堆栈放在不可读的内存中:0x7ffeeafe2af0:使用userDefaults

时间:2019-04-05 06:53:55

标签: ios objective-c userdefaults

我正在Objective-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 个答案:

答案 0 :(得分:1)

问题的原因是因为您的代码可以递归。

据我了解,您使用NSNotificationCenter来设置观察者键NSUserDefaultsDidChangeNotification。因此,无论何时NSUserDefaults被更新,它都会触发defaultsChanged方法。但是在其中,您继续更改NSUserDefaults,为totalBTCValuetotalUSDValue设置新值(据我猜),这使得defaultsChanged再次被调用并导致递归。 / p>

要解决此问题,请勿在{{1​​}}方法内更新NSUserDefaults