ios - 特定对象后的 NSDictionary 为空?

标签 ios objective-c null nsdictionary

我做了一个 NSDictionary,比如

 NSDictionary *question = [NSDictionary dictionaryWithObjectsAndKeys:
                                  variable_first,@"first",
                                  variable_second,@"second",
                                  variable_third,@"third",
                                  variable_fourth,@"fourth",
                                  variable_fifth,@"fifth",
                                      nil];

在这里,如果任何一个

变量优先 变量_秒 变量_第三 变量_第四 可变_第五

然后,Dictionary 将不再保存任何键。

比方说,如果来自服务器的 variable_third 为 null,则不会添加 variable_fourth 和 variable_fifth,无论它们是否有值。

我能看到 apple 写的任何地方吗,或者知道为什么 Objective-C 会显示这种行为?

谢谢。

最佳答案

这就是 NSDictionary 的工作原理,请阅读文档。它在第一个 nil 对象处停止。第一个 nil 值通常应该是您在末尾添加的 nil,但如果任何其他值是 nil,dictionaryWithObjectsAndKeys 就到此为止。

您可以使用现代语法 @{ key: value, key: value, ... }

在这种情况下,如果任何值为 nil,您的应用就会崩溃。这比默默地犯错要好 100 倍,因为应用程序崩溃了,你找到原因,然后修复它。

解决方法:您不能尝试将 nil 对象添加到字典中。有两种方法,你需要决定你想要哪一种:要么从一个可变字典开始,然后只添加那些值不为 nil 的键/值对。或者你在字典中添加一个值 [NSNull null] 而不是 nil 。显然,当您访问字典时,在一种情况下这些值将返回 nil,在另一种情况下它们将返回 [NSNull null]。无论你喜欢什么。

关于ios - 特定对象后的 NSDictionary 为空?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34390777/

相关文章:

ios - 重新加载 UITableView 会在动画后重置帧

iphone - iOS 静态库 .a 文件未包含

ios - 带有两种不同颜色文本的 UILabel

iphone - 从回调函数线程化时的“Just Leaking”

sql - 如果更新值为空,则不更新列

ios - iPhone 应用程序的 C 代码链接错误

ios - 速记比较最终太长而无法理解

iphone - ScrollView 在 Xcode 5 中不工作 - 没有效果, View 中不存在滚动

ios - 一些 IBOutlet 指向 nil

json - 在 JSON 中表示 null