1

我将一个 NSMutableArray 添加到另一个 NSMutableArray,问题是第一个数组中的所有对象都是相同的(长度大小内容等)。我猜当你将一个数组添加到一个数组时,第一个数组简单地保存一个指向第二个的指针,那么我如何让它保存一个唯一的数组?我想我需要在添加时使用 arrayWithArray 但我无法弄清楚语法。

我的 NSDictionary 包含许多对象,每个对象都有一个图像 URL 的负载,然后它会下载这些 URL。

到目前为止我的代码;

for (NSDictionary *obj in MyDictList)
{
    [tempImageArray removeAllObjects];

    for(NSString *tempImageURL in obj[@"images"])
    {
        tempImage = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:tempImageURL]]];
        NSLog(@"Download Extra Image : %@, %i", tempImageURL, [UIImagePNGRepresentation(tempImage) length]);
        [tempImageArray addObject:tempImage];
    }

    NSLog(@"Number of pics fo this event : %i", [tempImageArray count]);

    // Add the array of images to the array
    [eventImages addObject:tempImageArray];
}

通过此日志输出(如果不同,您可以看到每个图像 URL 和大小)。

Download Extra Image : http://.....A...Correct...URL/file.jpg, 69516
Download Extra Image : http://.....A...Correct...URL/file.jpg, 63263
Number of pics fo this event : 2
Download Extra Image : http://.....A...Correct...URL/file.jpg, 69516
Download Extra Image : http://.....A...Correct...URL/file.jpg, 64545
Number of pics fo this event : 2
Download Extra Image : http://.....A...Correct...URL/file.jpg, 56541
Download Extra Image : http://.....A...Correct...URL/file.jpg, 69144
Download Extra Image : http://.....A...Correct...URL/file.jpg, 51585
Number of pics fo this event : 3
Download Extra Image : http://.....A...Correct...URL/file.jpg, 56813
Download Extra Image : http://.....A...Correct...URL/file.jpg, 33869
Number of pics fo this event : 2

然后当我循环浏览它们时,我得到了最后一个数组的 4 个副本(即只有 2 张图片)。

Number of image in this Event at Row : 2, 0
Number of image in this Event at Row : 2, 1
Number of image in this Event at Row : 2, 2
Number of image in this Event at Row : 2, 3

编辑感谢您的帮助,朝正确的方向轻推,并将最后一行更改为阅读;

[eventImages addObject:[NSArray arrayWithArray:tempImageArray]];
4

2 回答 2

4

问题是你不应该使用removeAllObjects它,因为它只是清理了数组(删除你刚刚做的工作)。相反,您应该创建一个新数组 ( tempImageArray = [NSMutableArray array];)。

于 2013-07-05T12:44:39.563 回答
0

所以你想把它们结合起来吗?你可以这样做:

NSMutableArray *m1 = [[NSMutableArray alloc] initWithObjects:@"1", @"2", nil];
NSMutableArray *m2 = [[NSMutableArray alloc] initWithObjects:@"3", @"4", nil];

for (id obj in m2)
    [m1 addObject:obj];

(不确定这是否是您的问题)

于 2013-07-05T12:51:50.020 回答