如何在 NSDictionary 中为键和对象添加数组
Posted
技术标签:
【中文标题】如何在 NSDictionary 中为键和对象添加数组【英文标题】:How to add arrays for key and object in 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” 【参考方案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以上是关于如何在 NSDictionary 中为键和对象添加数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 iOS 中为 TTTAttributedLabel LinkAttributes 添加 NSDictionary UIColor