【问题标题】:How to add arrays for key and object in NSDictionary如何在 NSDictionary 中为键和对象添加数组
【发布时间】:2014-09-18 09:45:42
【问题描述】:

我有 2 个数组。 数组 A arrayA[0] 包含 {a,b,c,d,e...} 并且 数组 B arrayB[0] 包含 {a,b,c. ..}。并且两个数组都是可变的并且有很多对象。在NSMutableDictionary 中,数组 A 中的每个元素(作为键)都应该存储整个数组 B。

例如:

(key value)Array A[0] 有整个(object value)Array B(0...200)

(key value)Array A[1] 有整个(object value)Array B(0...200)

(key value)Array A[2] 有整个(object value)Array B(0...200)

我的代码:

for (int i=0; i<100; i++)
{

    [someDictionary setObject:arrayB forKey:arrayA[i]];

}

这不起作用,我也试过了:

[someDictionary initWithObjects:arrayB forKeys:arrayA[i]]

【问题讨论】:

  • 请提供更多信息; “它不起作用”是不够的。
  • 需要有关该错误的更多信息。我的意思是给我们看日志。
  • 错误:由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[Channels copyWithZone:]:无法识别的选择器发送到实例 0xbd2ae20”

标签: ios objective-c arrays xcode nsdictionary


【解决方案1】:

您应该使用NSString 将键存储在键值对中。所以我会推荐

for (int i=0; i<100; i++) {

    NSString *str=(NSString *)arrayA[i];

    [someDictionary setObject:arrayB forKey:str];

}

【讨论】:

  • 您可能有一些东西,但是将其转换为 NSString * 不会使其成为字符串。
  • 是的,没错,但关键是我们需要字符串作为“key”。我希望你明白我的意思。
  • 原因:'-[Channels copyWithZone:]:无法识别的选择器发送到实例 0xbd09d20'
  • 使用 NSMutableDictionary 而不是 NSDictionary
  • 我正在使用可变字典
【解决方案2】:

您的代码原则上看起来不错。显然固定为 100 个元素并不好,所以我会写

for (id key in self.arrayA)
    [someDictionary setObject:self.arrayB forKey:key];

【讨论】:

    【解决方案3】:

    试试这个答案。不知道老哥我对你的问题理解对了还是错了。

    试试我的代码:

    NSMutableArray *tempA=[NSMutableArray array];
    NSMutableArray *tempB=[NSMutableArray array];
    
    for (int a = 0; a < 100; a++)
    {
         [tempA addObject:[NSString stringWithFormat:@"%d",a]];
    }
    
    NSMutableArray *dataArray=[NSMutableArray array];
    NSMutableDictionary *dict;
    
    for (int i = 0; i < [tempA count]; i++)
    {
            for (int a = 0; a < 100; a++)
            {
                dict=[NSMutableDictionary dictionary];
                NSString*  localTemp=[NSString stringWithFormat:@"key-%@",[tempA objectAtIndex:i]];
                [tempB addObject:[NSString stringWithFormat:@"%d",a]];
                id object=[tempB objectAtIndex:a];
                [dict setObject:object forKey:localTemp];
                [dataArray addObject:dict];
            }
        }
        NSLog(@"Dictionary is---->%@",dataArray);
    

    【讨论】:

    • tbh 我不明白这段代码是什么意思。实际上使用简单的数组它可以正常工作,但我的 arrayA[0] 有 {a,b,c,d,e} 而 arrayA[2] 有 {a,b,c,d,e}
    • 这里a[0]、a[1]等同样的东西......将有一个完整的b数组值。
    • 实际上我的错误在于copyWithZone,所以我正在尝试修复它
    【解决方案4】:
     NSArray *arrayA = [NSArray arrayWithObjects:@"1",@"2", nil];
        NSArray *arrayB = [NSArray arrayWithObjects:@"3",@"4", nil];
        NSMutableDictionary *temp = [[NSMutableDictionary alloc]init];
    
        for(int i =0 ; i<[arrayA count];i++)
        {
            [temp setObject:arrayB forKey:[arrayA objectAtIndex:i]];
        }
    

    【讨论】:

    • 错误:由于未捕获的异常 'NSRangeException' 导致应用程序终止,原因:'*** -[__NSArrayM objectAtIndex:]:索引 196465664 超出范围 [0 .. 298]'
    • 这个有效。我尝试过这个。你得到什么类型的错误?
    • @user2885077 是的,这段代码有效,但我的数组有像 arrayA[0] 包含 {a,b,c,d,e} 之类的对象,还有 arrayB[0] 包含 {a,b,c}
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多