【问题标题】:How to add NSDictionary as a value in Objective-C?如何在 Objective-C 中添加 NSDictionary 作为值?
【发布时间】:2021-03-12 14:52:04
【问题描述】:

我有一个财产:

@property (nonatomic, strong) NSMutableDictionary<NSString *, NSMutableDictionary<NSString *, NSString *>*>*mainDict;

所以它是一个字典,另一个字典作为它的值。 现在,当我想填充我的字典时,我会这样做:

NSData *data = [json_string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

for (NSString *key in [[json objectForKey:@"countries"] allKeys]) {
    NSDictionary *innerDictionary = [json objectForKey:@"countries"][key];
    [mainDict setObject:innerDictionary forKey:key];
}

当我调试时,我看到我的 innerDictionary 是正确的并且有它的值,但不知何故我的 mainDict 没有被填充。

你能告诉我我做错了什么吗?

【问题讨论】:

  • 您是否在代码中的某处创建了 mainDict?
  • @Andrea 没有,只​​是在界面部分添加了属性
  • 如果您不在 init 或代码的其他部分中创建并分配给 self.mainDict 它只是一个指向无处的指针

标签: ios json objective-c nsdictionary


【解决方案1】:

将 mainDict 声明为 @property 将在您的类中创建一个实例变量,但该变量将为 nil。

您需要在调用填充代码之前的某个地方初始化 mainDict,可能在您的 -init、-viewDidLoad 或适合您应用架构的某个地方。

mainDict 初始化应该如下所示:

mainDict = [[NSMutableDictionary alloc] init];

【讨论】:

  • mainDict = [NSMutableDictionary new] 有点短,但也能正常工作。
  • 但我喜欢这种形式mainDict = @{}.mutableCopy
  • 我也喜欢mainDict = @{}.mutableCopy的形式,但不是最理想的。您正在制作两本词典以获取一本词典。 (当然,在实践中,99.99% 的情况下不会感觉到这种差异,除非代码在某个超级紧密的循环中或并行到刀柄中。)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-04
相关资源
最近更新 更多