如何合并两个 NSDictionaries?

How to combine two NSDictionaries?

我正在尝试将 2 个 NSDictionary 对象合并为 1 个 NSMutableDictionaryNSDictionary 是通过读取 2 个不同的 plist 文件创建的。

    @property (nonatomic, strong) NSMutableDictionary *configuration;
    ...
    -(NSMutableDictionary*) configuration{
    if (!_configuration) {
      NSDictionary *core_config = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"installation" ofType:@"plist"]];
      NSDictionary *app_config = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle bundleWithPath:@"/path/to"] pathForResource:@"something/data" ofType:@"plist"]];
      [_configuration addEntriesFromDictionary: core_config];
      [_configuration addEntriesFromDictionary: app_config];
      NSLog(@"merged: %lu, core: %lu, app: %lu", (unsigned long)[_configuration count],  (unsigned long)[core_config count],  (unsigned long)[app_config count]);
      // merged: 0, core: 4, app: 5
    }
    return _configuration;
    }

_configuration 是空的,尽管调用了 addEntriesFromDictionary 两次。

你在添加条目之前初始化你的 NSMutableDictionary 了吗?

NSMutableDictionary *configuration = [[NSMutableDictionary alloc] init];

这有效:

-(NSMutableDictionary*) configuration{
    if (!_configuration) {
        NSDictionary *core_config = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"installation" ofType:@"plist"]];
        NSDictionary *app_config = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle bundleWithPath:@"/Volumes/RolloutSDKInstaller"] pathForResource:@".rollout/app" ofType:@"plist"]];
        _configuration = [NSMutableDictionary dictionaryWithDictionary: core_config];
        [_configuration addEntriesFromDictionary: app_config];
        NSLog(@"merged: %lu, core: %lu, app: %lu", (unsigned long)[_configuration count],  (unsigned long)[core_config count],  (unsigned long)[app_config count]);
        //merged: 9, core: 4, app: 5
    }

    return _configuration;
}