2013-07-29 34 views
0

我正在將相機中的圖像保存在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]; 
} 
+1

不要每次添加內容時重新創建數組。這有點失去了舊內容。 –

回答

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

爲什麼-viewDidLoad,UIViewController生命週期怎麼樣? – Injectios

+0

不是特別viewDidLoad,但不是當保存圖片,因爲它會重置現有的圖片 –

+0

它可能在任何地方,但像保存圖片時@RobvanderVeer說不。 –

1

,那是因爲這個問題[NSMutableArray的arrayWithCapacity:10]。實際上在數組的內存中分配了一個新的位置,而你的指針camImages正在指向一個新的數組,失去了之前分配的舊數組的引用。

因此,無論何時拍攝一張新照片,數組的新存儲位置都將被分配,只有當前圖像。

要解決此問題,您應該只分配一次這個數組,並使用相同的內存位置爲數組添加圖像。

正如Abdullah Shafique指出的那樣,您可以在先前的某個方法(如viewDidLoad)中分配一次該數組,或者僅在您的委託方法中使用惰性實例和if。

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

請記住,'init'例程正是爲了完成這種初始化。不需要增加複雜性來執行「懶惰」初始化。 –