应该重复使用相机崩溃的应用程序?

问题描述:

我有一个应用程序,从用户图像构建幻灯片。他们可以从他们的图书馆中抓取图片或拍照。我发现重复使用从图书馆抓取图像是很好的。但重复使用拍摄照片会导致不稳定的行为。我一直在崩溃,但大部分情况似乎是在“didFinishPickingMediaWithInfo”之后重新加载视图,这会导致混乱。应该重复使用相机崩溃的应用程序?

我没有泄漏,它似乎是在每张照片拍摄后正确释放。我正在调整图像大小并将其保存在数据库中。有没有人遇到这种情况?相机是不是被设计为经常被调用?

+1

你肯定有什么错,仅仅是因为你可以在正常使用相机时几乎无限期地继续拍照。除非在SDK中有一些错误的行为,但我敢肯定,没有什么是严重的 - 至少如果您在Google上找不到任何信息。 – 2010-06-14 20:27:18

+0

发布您的代码我们可能会帮助 – Daniel 2010-06-14 20:28:03

+0

谢谢,代码刚刚发布 – Sam 2010-06-14 21:19:32

对不起。它不是连续的,它是拍摄照片,取出并释放相机,然后用户选择A,B或C选项(它们会在整个过程中提示选择许多东西),然后他们可以拍摄另一张照片,取出并释放相机。 ..等等......这些事情发生了几次,他们完成了所有的数据输入。

他们选择相机后,我称之为代码。我没有在dealloc方法中释放图像选择器。

- (void)openCamera { 
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) 
{ 

    imagePicker = [[UIImagePickerController alloc] init]; 
    imagePicker.delegate = self; 
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 
    [self presentModalViewController:imagePicker animated:YES]; 
[imagePicker release]; 
} 

}

从相机我叫下面的代码,他们“用”拍摄的照片后。它基于图像的原始大小调整图像大小。

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 

UIImage *tempCameraImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; 
    [picker dismissModalViewControllerAnimated:YES]; 

    CGFloat originalSize = tempCameraImage.size.width * tempCameraImage.size.height; 
    NSLog(@"Original Size %f", originalSize); 
    if (originalSize > 2500000.0) { 
     CGSize size = tempCameraImage.size; 
     CGRect rect = CGRectMake(0.0, 0.0, .23 * size.width, .23 * size.height); 
     UIGraphicsBeginImageContext(rect.size); 
     [tempCameraImage drawInRect:rect]; 
     theImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     CGFloat totalSize = theImage.size.width * theImage.size.height; 
     NSLog(@"Final Camera Size %f", totalSize); 
     [self resizeImageCamera]; 
     return; 
    } 
    else { 
     CGSize size = tempCameraImage.size; 
     CGRect rect = CGRectMake(0.0, 0.0, .27 * size.width, .27 * size.height); 
     UIGraphicsBeginImageContext(rect.size); 
     [tempCameraImage drawInRect:rect]; 
     theImage = UIGraphicsGetImageFromCurrentImageContext(); 
     UIGraphicsEndImageContext(); 
     CGFloat totalSize = theImage.size.width * theImage.size.height; 
     NSLog(@"Final Camera Size %f", totalSize); 
     [self resizeImageCamera]; 
     return; 
    } 

}

-(void)resizeImageCamera { 
if (editingImage1) { 
    NSManagedObject *image = [NSEntityDescription insertNewObjectForEntityForName:@"Image" inManagedObjectContext:slideshow.managedObjectContext]; 
    slideshow.image = image; 
    [image setValue:theImage forKey:@"image"]; 

    CGSize size = theImage.size; 
    CGRect rect = CGRectMake(0.0, 0.0, .15 * size.width, .15 * size.height); 
    UIGraphicsBeginImageContext(rect.size); 
    [theImage drawInRect:rect]; 
    slideshow.thumbnailImage1 = UIGraphicsGetImageFromCurrentImageContext(); 
    UIGraphicsEndImageContext(); 
    [self finishCameraImage]; 
    return; 
} 

}

-(void)finishCameraImage { 

if (editingImage1) { 
    keyInt = @"2"; 
    [editedObject setValue:keyInt forKey:@"script1"]; 
    pictureView.alpha = 0; 
    self.navigationItem.rightBarButtonItem = nil; 
    editedFieldKey = @"line2Int"; 
    editedFieldName = NSLocalizedString(@"line2Int", @"display name for line2"); 
    self.title = editedFieldName; 
    linePicker.hidden = NO; 

}

我知道我做了很多这样的形象。如果我投入几次延迟会有帮助吗?