Ios 多个图像 ;在 ;可变数组
我正在将相机中的图像保存在NSMutableArray中。当我添加一张图片时,该图片将添加到数组中。但是,问题是,当我拍摄另一张照片时,第一张照片会被第二张照片取代。我想保存相机拍摄的所有照片Ios 多个图像 ;在 ;可变数组,ios,camera,nsmutablearray,Ios,Camera,Nsmutablearray,我正在将相机中的图像保存在NSMutableArray中。当我添加一张图片时,该图片将添加到数组中。但是,问题是,当我拍摄另一张照片时,第一张照片会被第二张照片取代。我想保存相机拍摄的所有照片 - (IBAction)takePhoto { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditin
- (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];
}
Take-away
camImages=[NSMutableArray阵列容量: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];
Take-awaycamImages=[NSMutableArray阵列容量: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];
问题在于[NSMutableArray阵列容量:10];实际上为数组在内存中分配了一个新位置,并且指针指向了一个新数组,失去了先前分配的旧数组的引用
因此,每当您拍摄一张新照片时,都会为阵列分配一个新的内存位置,其中只包含当前图像
要解决此问题,您应该只分配此阵列一次,并使用阵列的相同内存位置来添加图像
正如Abdullah Shafique所指出的,您可以在前面的某个方法(如viewDidLoad)中分配此数组一次,或者只使用惰性实例化,在委托方法中使用if
if(!camImages){
camImages = [NSMutableArray new];
}
问题在于[NSMutableArray阵列容量:10];实际上为数组在内存中分配了一个新位置,并且指针指向了一个新数组,失去了先前分配的旧数组的引用
因此,每当您拍摄一张新照片时,都会为阵列分配一个新的内存位置,其中只包含当前图像
要解决此问题,您应该只分配此阵列一次,并使用阵列的相同内存位置来添加图像
正如Abdullah Shafique所指出的,您可以在前面的某个方法(如viewDidLoad)中分配此数组一次,或者只使用惰性实例化,在委托方法中使用if
if(!camImages){
camImages = [NSMutableArray new];
}
为什么-viewDidLoad,UIViewController的生命周期如何?不具体是viewDidLoad,但在保存图片时不会,因为它会重置现有图片。它可能在任何地方,但就像@Robvandervieer在保存图片时说的那样。我只是想说,将它放入-viewDidLoad并不是一件好事。。。最好使用-init或“lazy”属性self。camImages@Nasir你能用断点告诉我它在哪里崩溃吗?为什么-viewDidLoad,UIViewController的生命周期呢?不是特别的viewDidLoad,但在保存图片时不会,因为它会重置现有图片。它可以在任何地方,但就像@robvandervieer在保存图片时所说的那样。我只是想说,将它放入-viewDidLoad并不是一件好事。。。最好使用-init或“lazy”属性self。camImages@Nasir你能用断点告诉我它在哪里崩溃吗?不要每次添加东西时都继续重新创建数组。这样会丢失旧内容。不要每次添加内容时都继续重新创建数组。这样会丢失旧的内容。各位,请记住,init
例程正是用来进行这种初始化的。无需增加“惰性”初始化的复杂性。各位,请记住,init
例程正是用来进行这种初始化的。无需增加复杂性即可进行“惰性”初始化。