2012-05-01 43 views
0

我正在嘗試保存UIImage,但它給了我一個錯誤。 UIImage是從UIImagePickerController中挑選出來的,然後通過製作一個NSData並在此NSData對象上調用writeToFile:來保存。 這樣做,我會得到一個錯誤。相同的方法完美地存儲其他圖像。我沒有問題存儲的圖像從網站檢索爲字節數組,然後轉換爲UIImage,然後保存。 看來,這個問題是專門爲UIImagePickerController圖像。寫入文件時ImageIO錯誤

有人可以告訴我如何解決這個問題嗎?

這似乎從UIImagePickerController圖像保存很好,但我仍然得到這個錯誤,導致應用程序崩潰:五月

1 10時38分05秒的Simon-BS-iPhone Diims [619] :ImageIO的:JPEG 損壞JPEG數據:數據段的過早結束

這是用於保存圖像的代碼:

+ (void)storeImage:(UIImage *)image name:(NSString *)name 
{ 
    NSString *pathForCache = [self pathForCache]; 
    NSData *imageData = [NSData dataWithData:UIImageJPEGRepresentation(image, 1.0f)]; 
    NSString *jpegPath = [pathForCache stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.jpeg", name]]; 

    NSError *error; 
    if ([imageData writeToFile:jpegPath options:NSDataWritingAtomic error:&error] == NO) 
    { 
     DLog(@"Could not save image: %@", jpegPath); 
     DLog(@"%@", error); 
    } 
} 

它被稱爲像這樣被選中的圖像時:

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo 
{ 
    // Close controller 
    [picker dismissModalViewControllerAnimated:YES]; 

    // Save image 
    self.selectedDevice.image = image; 
    [CDeviceManager localUpdateDevice:self.selectedDevice delegate:self]; 
} 
+1

試着改變你的代碼如下,如果它的工作原理: - - (空)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { //保存圖像 self.selectedDevice.image = image; [CDeviceManager localUpdateDevice:self.selectedDevice delegate:self]; //關閉控制器 [picker dismissModalViewControllerAnimated:YES]; } //保存圖像後關閉 –

+0

這似乎是個竅門。非常感謝你。你能否給你的評論一個答案? – simonbs

+0

嗨SimonBS,我發佈了相同的答案。 –

回答

1

試着改變你的代碼如下,如果它的工作原理: -

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo 
{ 
     // Save image self.selectedDevice.image = image; 
     [CDeviceManager localUpdateDevice:self.selectedDevice delegate:self]; 

     // Close controller [picker dismissModalViewControllerAnimated:YES]; 
     //dismiss after saving the image 
    }