我正在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];
}
答案 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];
}