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

问题描述 投票:-1回答:1

我正在使用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"] ]];
    }

任何人都可以帮助我。谢谢你

ios objective-c userdefaults
1个回答
2
投票

您遇到问题的原因是您的代码获得了递归。

据我所知,你使用NSNotificationCenter来观察关键的NSUserDefaultsDidChangeNotification。因此,每当更新NSUserDefaults时,它将触发defaultsChanged方法。但在其中,你继续改变NSUserDefaults,为totalBTCValuetotalUSDValue设置新值(我猜),这使得defaultsChanged再次被调用并导致递归。

要解决此问题,您不应在NSUserDefaults方法中更新defaultsChanged

© www.soinside.com 2019 - 2024. All rights reserved.