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

Posted

技术标签:

【中文标题】错误:试图将堆栈放在不可读的内存中:0x7ffeeafe2af0:使用 userDefaults【英文标题】:error: Trying to put the stack in unreadable memory at: 0x7ffeeafe2af0 : using userDefaults 【发布时间】:2019-04-05 06:53:55 【问题描述】:

我在 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"] ]];
    

任何人都可以帮助我。在此先感谢

【问题讨论】:

请添加代码,因为totalBTCValuetotalUSDValue已经初始化,直到它被保存到NSUserDefault 更新了我的代码请帮助我... 你在哪一行得到了错误? 从 userDefaults 获取数据时出现错误 你用来从 NSUserDefault 获取数据的代码在哪里? 【参考方案1】:

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

据我了解,您使用NSNotificationCenter 观察员密钥NSUserDefaultsDidChangeNotification。所以每当NSUserDefaults更新时,都会触发defaultsChanged方法。但在其中,您继续更改NSUserDefaults,为totalBTCValuetotalUSDValue 设置新值(我猜)这使得defaultsChanged 被再次调用并导致递归。

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

【讨论】:

以上是关于错误:试图将堆栈放在不可读的内存中:0x7ffeeafe2af0:使用 userDefaults的主要内容,如果未能解决你的问题,请参考以下文章

如何解决 Azure DevOps 中的“堆栈跟踪错误”

c++/c语言求助 string变量作为结构体成员在引用的时候内存不可读的问题

JAVA堆栈在哪里设置?

linux是不是在较低的堆栈端下方提供了保证的不可访问的内存区域?

java.lang.IllegalArgumentException:无效或不可读的 WAR 文件:打开 zip 文件时出错

odoo 12 错误 - 您无权访问所请求的资源。它要么是读保护的,要么是服务器不可读的