2012-09-20 25 views
1

我通過相機捕獲圖像。然後我轉到下一個控制器,在其中顯示拍攝的圖像。我回去捕捉圖像屏幕,並且這個循環持續10到15次。在此之後,當我嘗試捕捉圖像時,應用程序會因「低內存警告」而崩潰。 下面是代碼:應用程序在圖像捕獲崩潰

- (IBAction) takePhoto:(id) sender 
{ 
    /* 
    tempControl *intermediate=[[tempControl alloc] initWithNibName:@"tempControl" bundle:nil]; 
    [self.navigationController pushViewController:intermediate animated:YES]; 
    [intermediate release]; 
    */ 
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]){ 
     imagePickerController= [[UIImagePickerController alloc] init]; 
     [imagePickerController setMediaTypes:[NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil]]; 
     imagePickerController.delegate = self; 
     imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera; 

     [self presentModalViewController:imagePickerController animated:YES]; 
    } 
    else{ 
     UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Camera Alert" message:@"Device Lacks Camera" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil]; 
      [alert show]; 
      [alert release]; 
      alert = nil; 
    } 
} 

- (void)imagePickerController:(UIImagePickerController *)picker 
     didFinishPickingImage:(UIImage *)image 
        editingInfo:(NSDictionary *)editingInfo{ 

    [picker dismissModalViewControllerAnimated:NO]; 
    [picker release]; 
    picker =nil; 
    /* 
    cropReciept *recieptToCrop=[[cropReciept alloc] initWithNibName:@"cropReciept" bundle:nil]; 
    [recieptToCrop setReciept:image]; 
    [self.navigationController pushViewController:recieptToCrop animated:YES]; 
    [recieptToCrop release]; 
    */ 
    OCRDemoViewController *recieptToCrop=[[OCRDemoViewController alloc] initWithNibName:@"CropTestViewController" bundle:nil]; 
    [recieptToCrop setImageToCrop:image]; 
    if ([self.selectedTicketType isEqualToString:@"MAXI QuickPick"]) { 
     recieptToCrop.selectedValueOfTicket=50; 
     recieptToCrop.drawNumber=self.selectedDrawNumber; 
    } 
    else if ([self.selectedTicketType isEqualToString:@"JUMBO QuickPick"]) { 
     recieptToCrop.selectedValueOfTicket=36; 
     recieptToCrop.drawNumber=self.selectedDrawNumber; 
    } 
    else if ([self.selectedTicketType isEqualToString:@"MEGA QuickPick"]) { 
     recieptToCrop.selectedValueOfTicket=24; 
     recieptToCrop.drawNumber=self.selectedDrawNumber; 
    } 
    else if ([self.selectedTicketType isEqualToString:@"REGULAR QuickPick"]) { 
     recieptToCrop.selectedValueOfTicket=12; 
     recieptToCrop.drawNumber=self.selectedDrawNumber; 
    } 
    else if ([self.selectedTicketType isEqualToString:@"SUPER QuickPick"]) { 
     recieptToCrop.selectedValueOfTicket=18; 
     recieptToCrop.drawNumber=self.selectedDrawNumber; 
    } 

    [self.navigationController pushViewController:recieptToCrop animated:YES]; 
    [recieptToCrop release]; 
    recieptToCrop=nil; 
} 
+0

什麼是崩潰報告 – Rajneesh071

+2

這是由於保留release..make確保你正在做正確 – Rajneesh071

+0

它給控制檯內存不足警告前2次嘗試再次捕獲圖像。 :(奇怪的 –

回答

1

不要釋放委託回調揀貨機,而是派遣塊做在接下來的運行循環(你可以使用後performSelector:0太)。

還使用工具ObjectAlloc和泄漏來看看沒有得到處理。

+0

你能告訴我如何使用儀器嗎?我從來沒有使用它之前 –

+0

這不是一個簡單的一段答案。 Apple iOS文檔,我認爲Xcode本身也有幫助,從Product菜單中選擇Profile,然後選擇Allocations,運行該應用並在下面觀看,它非常簡單。 –

0

您需要調整圖像大小然後使用它。從相機點擊的圖像大約是。超過2 mb.嘗試從相機捕獲然後使用它調整大小的圖像。 你需要做的: -

- (void)imagePickerController:(UIImagePickerController *)picker 
     didFinishPickingImage:(UIImage *)image 
        editingInfo:(NSDictionary *)editingInfo{ 
UIGraphicsBeginImageContext(size);//640*920 or what ever you think appropriate 
    [image drawInRect:CGRectMake(0, 0, size.width, size.height)]; 
    UIImage *finalImage = UIGraphicsGetImageFromCurrentImageContext();  
    UIGraphicsEndImageContext(); 
    [picker dismissModalViewControllerAnimated:NO]; 
    [picker release]; 
    picker =nil; 
} 
And now use finalImage instead of image 
相關問題