Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 目标C.为现有密钥增加价值的NSMutable字典_Objective C_Nsmutablearray_Nsmutabledictionary - Fatal编程技术网

Objective c 目标C.为现有密钥增加价值的NSMutable字典

Objective c 目标C.为现有密钥增加价值的NSMutable字典,objective-c,nsmutablearray,nsmutabledictionary,Objective C,Nsmutablearray,Nsmutabledictionary,有没有办法向NSMutableDictionary上的现有键添加值 下面是我的代码片段 NSMutableArray *mainFeedList = [NSMutableArray array]; [mainFeedList addObjectsFromArray:feedList]; for(int i = 0; i < mainFeedList.count; i++){ NSMutableArray *allFeed = [NSMutableArray array

有没有办法向
NSMutableDictionary
上的现有键添加值

下面是我的代码片段

 NSMutableArray *mainFeedList = [NSMutableArray array];
  [mainFeedList addObjectsFromArray:feedList];

  for(int i = 0; i < mainFeedList.count; i++){

    NSMutableArray *allFeed = [NSMutableArray array];

    NSString *categoryId = [mainFeedList[i] valueForKey: @"categoryId"];

    [allFeed addObject:mainFeedList[i]];

    if(allFeed != nil && allFeed.count > 0) {

      [feedContent setObject:allFeed
                      forKey:[combinedCategories[(int)[categoryId integerValue]] valueForKey: @"name"]];
    }
我知道

[mDict setObject:mArray forKey:@"key1"];
将对象设置为
key1
,但我需要的是


将另一个对象添加到
key1
而不替换现有对象(我两者都需要)

任何
NSDictionary
的结构都是“一个键到一个对象”。如果要构建映射一个键多个对象的结构,则需要一个将键映射到集合的
NSDictionary
,例如
NSArray
NSMutableArray

NSMutableDictionary *mDict = @{
    @"key1": [@[ @"value1" ] mutableCopy]
,   @"key2": [@[ @"value2" ] mutableCopy]
};
现在,您可以在不替换现有值的情况下向键添加值:

[mDict[@"key1"] addObject:@"value3"];

NSDictionary
仅允许与单个键对应的单个对象。如果要添加与单个键对应的多个对象,如果对象为字符串类型,则还可以使用分隔符组合字符串,如:


[mDict setObject:[NSString stringWithFormat:@“%@,%@”,[mDict objectforKey:@“key1”],@“value2”]forKey:@“key1”];


否则,您必须获取您在问题中已定义的集合。

在不替换现有对象的情况下向key1添加另一个对象

为什么不将dict设置为key1

之前:

[dict setObject:@“a”forKey:@“key1”]

你想:

在dict中的“key1”中添加@“b”

为什么不喜欢:


[dict setObject:@{“a”:“subKey1”,“b”:“subKey2”)forKey:@“key1”]

我建议将数组作为键存储在字典中,如下所示:

// Setting the value for "key1" to an array holding your first value
NSMutableDictionary *mDict = @{@"key1":@["value1"],@"key2": @"value2"};
现在,当我想添加一个新值时,我会这样做:

// Create temp array
NSMutableArray *temp = mDict[@"key1"];

// Add new object
[temp addObject:@"value3"];

// Convert temp NSMutableArray to an NSArray so you can store it in your dict
NSArray *newArray = [[NSArray alloc] initWithArray:temp];

// Replace old array stored in dict with new array
mDict[@"key1"] = newArray;
此外,如果您不确定是否已为该密钥存储了数组,则可以运行检查并使用空字典进行填充,如下所示:

if (mDict[@"key1"] == nil) {
    mDict[@"key1"] = @[];
}

做不到。字典必须有唯一的键。如果存在重复项,您将无法使用字典获取。我是否应该检查该键是否存在,然后如果存在,则向该键添加对象将此代码[mdct[@“key1”]addObject:@“value3”];将对象添加到键,否则它将仅替换当前value@SkyWalker绝对地这只是一个使用问题代码的快速说明
addObject
将为同一个键添加第二个对象,因此您将得到以下结构:
@“key1”:@[@“value1”,“value3”]
NSMutableDictionary*dict=[[NSMutableDictionary alloc]init];如果([dict valueForKey:@“name”!=nil){[dict setValue:@“value”forKey:@“name”];}否则{[dict[@“name”]addObject:@“value3”];}@SkyWalker将不起作用,因为您添加的对象需要是可变数组,即添加第一个对象需要如下所示:`[dict setValue:[@[@“value”]mutableCopy]forKey:@“name”]`
if (mDict[@"key1"] == nil) {
    mDict[@"key1"] = @[];
}