我正在使用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"] ]];
}
任何人都可以帮助我。谢谢你
您遇到问题的原因是您的代码获得了递归。
据我所知,你使用NSNotificationCenter
来观察关键的NSUserDefaultsDidChangeNotification
。因此,每当更新NSUserDefaults
时,它将触发defaultsChanged
方法。但在其中,你继续改变NSUserDefaults
,为totalBTCValue
和totalUSDValue
设置新值(我猜),这使得defaultsChanged
再次被调用并导致递归。
要解决此问题,您不应在NSUserDefaults
方法中更新defaultsChanged