-5

我有一个包含 30 个图像的数组,我只想将 15 个图像添加到 nsmutable 字典中,并且要随机添加

我正在使用以下代码

for (m = 0; m < 20; m++)
{   
 rnd = arc4random_uniform(FrontsCards.count);       

 dic=[[NSMutableDictionary alloc]init];     
 [dic setObject:[NSNumber numberWithInt:rnd] forKey:@"Images"]; 
 NSLog(@"%@",dic);

}

这里的问题是,对于 m=0 条目进入字典,对于 m=1 再次进入字典中的条目替换第一个条目,最后我只得到最后一个值,所需的输出是所有 20 个值,任何人都可以帮助我..
提前谢谢...

4

6 回答 6

1

您为您设置的每个数字使用相同的标签“图像”。因此它一次又一次地被替换

 dic=[[NSMutableDictionary alloc]init];     


for (m = 0; m < 20; m++)
{   
    rnd = arc4random_uniform(FrontsCards.count);       

    [dic setObject:[NSNumber numberWithInt:rnd] forKey:[NSString stringWithFormat:@"Images_%d",rnd]; 


}

 NSLog(@"%@",[dic description]);
于 2013-05-23T11:10:52.240 回答
0

我在你的代码中发现了很多问题:
1. 你想添加 15 个图像但循环 20 个;
2.您在侧循环中创建字典,因此它将创建 20 次。每次创建新字典并删除旧字典时。
3.您使用相同的密钥来存储所有值。您必须为每个项目使用唯一的密钥。其他明智的旧itel被替换

像这样使用

dic=[[NSMutableDictionary alloc]init]; 

for (m = 0; m < 15; m++)
{   
     rnd = arc4random_uniform(FrontsCards.count);       

     [dic setObject:[NSNumber numberWithInt:rnd] forKey:[NSString  stringWithFormat@"Image%d",rnd]]; 
}
NSLog(@"%@",dic);
于 2013-05-23T11:07:54.780 回答
0

您正在分配新的 dic evrytime。所以它会被覆盖。尝试这个。也正如 Mayur 所说,您不能使用相同的密钥。

dic=[[NSMutableDictionary alloc]init]; 
for (m = 0; m < 20; m++)
{   
 rnd = arc4random_uniform(FrontsCards.count);       


 [dic setObject:[NSNumber numberWithInt:rnd] forKey:[NSString stringWithFormat:@"Images_%d",rnd]]; 


}
 NSLog(@"%@",dic);
于 2013-05-23T11:08:02.650 回答
0

您不能使用相同的键输入多个对象或图像...这里的键设置为图像。因此,名为 images 的键的值将一次又一次地设置......您必须在每种情况下为键指定不同的名称,或者使用数组来存储所有图像。

还要在 for 循环之外声明字典。试试下面的代码。

dic=[[NSMutableDictionary alloc]init];   
for (m = 0; m < 20; m++)
{   
 rnd = arc4random_uniform(FrontsCards.count);       
 [dic setObject:[NSNumber numberWithInt:rnd] forKey:@"Images_%d", m]; 
 NSLog(@"%@",dic);

}
于 2013-05-23T11:09:21.890 回答
0

在这种情况下,您需要使用 NSMutableArray 因为您一次又一次地使用相同的键,因此最后一个值将被新值替换。所以有2个选项

1)首先为每个图像使用不同的密钥。

2)您可以使用 NSMutableArry 添加新对象。

于 2013-05-23T11:14:02.503 回答
0

以上答案是正确的您按照此代码解决您的问题。

于 2013-05-24T10:10:17.977 回答