Ios 多个图像 ;在 ;可变数组

Ios 多个图像 ;在 ;可变数组,ios,camera,nsmutablearray,Ios,Camera,Nsmutablearray,我正在将相机中的图像保存在NSMutableArray中。当我添加一张图片时,该图片将添加到数组中。但是,问题是,当我拍摄另一张照片时,第一张照片会被第二张照片取代。我想保存相机拍摄的所有照片 - (IBAction)takePhoto { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.delegate = self; picker.allowsEditin

我正在将相机中的图像保存在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];
}

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-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];

问题在于[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
例程正是用来进行这种初始化的。无需增加复杂性即可进行“惰性”初始化。