NSMutableArray中的多个图像

时间:2013-07-29 20:21:41

标签: ios camera nsmutablearray

我正在NSMutableArray中保存来自相机的图像。当我添加一张图片时,图片会添加到数组中。但问题是,当我拍摄另一张照片时,第一张照片会被第二张照片取代。我想保存相机拍摄的所有照片。

- (IBAction)takePhoto {
    UIImagePickerController *picker = [[UIImagePickerController alloc] init];
    picker.delegate = self;
    picker.allowsEditing = YES;
    picker.sourceType = UIImagePickerControllerSourceTypeCamera;

    [self presentViewController:picker animated:YES completion:NULL];
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
    UIImage *cameraImage = info[UIImagePickerControllerEditedImage];
    self.tempView.image = cameraImage;
    camImages = [NSMutableArray arrayWithCapacity:10];
    [camImages addObject:self.tempView.image];
    //self.chosenImages=camImages;
    NSLog(@"the image is=%@",camImages);
    [picker dismissViewControllerAnimated:YES completion:NULL];
}

2 个答案:

答案 0 :(得分:2)

带走camImages = [NSMutableArray arrayWithCapacity:10];并将其放入viewDidLoad。

编辑:请改用:

UIImage *cameraImage = info[UIImagePickerControllerEditedImage];
self.tempView.image = cameraImage;

if(!camImages)camImages = [[NSMutableArray alloc]init];

camImages = [NSMutableArray arrayWithCapacity:10];
[camImages addObject:self.tempView.image];
//self.chosenImages=camImages;
NSLog(@"the image is=%@",camImages);
[picker dismissViewControllerAnimated:YES completion:NULL];

答案 1 :(得分:1)

问题是因为[NSMutableArray arrayWithCapacity:10];实际上在内存中为数组分配一个新位置,你的指针camImages指向一个新数组,丢失了你之前分配的旧数组的引用。

因此,无论何时拍摄新照片,都会分配阵列的新内存位置,仅包含当前图像。

要解决此问题,您应该只分配此数组一次,并使用相同的内存位置来添加图像。

正如Abdullah Shafique指出的那样,你可以在一些先前的方法中分配这个数组,比如viewDidLoad,或者只是使用lazy instantiation,在你的委托方法中使用if。

if(!camImages){
     camImages = [NSMutableArray new];
}