尝试在 NSMuableDictionary 中设置值时应用程序崩溃
Posted
技术标签:
【中文标题】尝试在 NSMuableDictionary 中设置值时应用程序崩溃【英文标题】:App crashing when trying to setValue in NSMuableDictionary 【发布时间】:2015-07-17 06:32:54 【问题描述】:当我尝试在 NSMutableDictionary
中设置值时,我的应用程序崩溃了。
下面是演示崩溃的代码,我在控制台中也找不到任何崩溃日志。
NSArray *b =[[a objectAtIndex:1] valueForKey:@"value"];
NSMutableDictionary *b1 =[b objectAtIndex:0];
NSString *str = self.tes;
[b1 setValue:str forKey:@"value"];
请帮我解决这个问题。
b1 字典日志
question = "vale";
type = a;
【问题讨论】:
什么是 b1 字典添加日志与您的问题。 我已经在问题中添加了日志 NSMutableDictionary *b1 = [NSMutableDictionary alloc] initWithDictionary:[b objectAtIndex:0]];试试这个 请按照@jogshardik 所说的进行尝试。 (Y) 它使用公共内存位置来访问数据并更新同一内存位置中的值。我们不能分配初始化字典 【参考方案1】:setValue:forKey:
是NSKeyValueCoding
协议的一部分,除其他外,它允许您从 Interface Builder 之类的访问对象属性。 setValue:forKey:
在 NSDictionary 以外的类中实现。
setObject:forKey:
是NSMutableDictionary
存在的理由。它的签名恰好与setValue:forKey:
非常相似,但更通用(例如任何密钥类型)。
因此,在您的情况下,只需将所有 setValue:forKey
替换为 setObject:forKey
并将 valueForKey:
替换为 objectForKey:
--
Difference between objectForKey and valueForKey?
【讨论】:
使用setValue:forKey:
实际上更安全,因为它通过删除键来处理nil
值。另一方面,setObject:forKey:
会抛出异常并可能导致应用程序崩溃。
我更喜欢处理nil
值而不是收集奇怪的错误:)
什么错误?它是NSMutableDictionary
的定义和记录的行为。也有道理:如果您将nil
设置为@"key"
,那么获取@"key"
的值应该是nil
(不存在)。【参考方案2】:
所以你说你遇到了EXC_BAD_ACCESS
崩溃。尝试在 Xcode 的 Scheme 编辑器中打开 Zombies。见Enable and Debug Zombie objects in ios using Xcode 5.1.1。该问题解释了如何使用它,但您不需要运行其中提到的 Instruments。
然后运行应用程序,Xcode 会告诉你EXC_BAD_ACCESS
的原因。不要忘记在不需要时将僵尸关闭。
Zombie这个名字来源于这样一个事实,在这种模式下,所有被释放的对象都将被标记并保存为特殊的内存区域(不是活的,不是死的,僵尸)。一旦您的代码尝试使用此类释放的对象,Xcode 会注意到并打印有用的消息。
【讨论】:
启用 zoombie 也没有为我提供任何解决方案.. :( 我认为问题在于 ios 中的内存分配。你能检查一下吗?以上是关于尝试在 NSMuableDictionary 中设置值时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章
尝试在 Swift 5 中设置 UISearchController 的背景颜色