2011-04-11 2 views
0

내 사과를 제출하기 전에 마지막으로 오류 메시지가 표시됩니다. 휴대 전화에 이미지를 저장하면 파일이 손상됩니다. 파일을 열려고하면 오류 Corrupt JPEG data: premature end of data segment이 표시되고 충돌이 발생합니다.성가신 오류 : JPEG 데이터가 손상되었습니다. 데이터 세그먼트가 조기에 끝납니다.

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo { 
[picker.parentViewController dismissModalViewControllerAnimated:NO]; 

uploadImage = image; 
int orient = uploadImage.imageOrientation; 
NSString *theOrientation = [NSString stringWithFormat: @"%d", orient]; 

NSString *latestIDQuery = @""; 
NSArray *results = [database executeQuery:@"SELECT * FROM processes ORDER BY id DESC LIMIT 0,1"]; 
for (NSDictionary *row in results) { 
    latestIDQuery = [row valueForKey:@"id"]; 
} 

int latestID = [latestIDQuery intValue]; 

int newID = latestID + 1; 

NSString *newIDString = [[NSString alloc] initWithFormat:@"%d", newID]; 
NSString *imageURL = [NSString stringWithFormat:@"Documents/%@_process.jpg",newIDString]; 

NSLog(@"Saving here... %@", imageURL); 

NSString *uploadImagePath = [NSString stringWithFormat:@"%@_process.jpg",newIDString]; 

NSString *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:imageURL]; 
NSLog(@"Needs to write something like this: %@", jpgPath); 
[UIImageJPEGRepresentation(uploadImage, 1.0) writeToFile:jpgPath atomically:YES]; 

[database executeNonQuery:@"INSERT INTO processes (image, album, status, orient, ready) VALUES (?, ?, ' In Queue', ?, 'no');", uploadImagePath, selectedID, theOrientation]; 

TableViewAppDelegate *dataCeter = (TableViewAppDelegate *)[[UIApplication sharedApplication] delegate]; 
dataCeter.dataSix = nil; 
NSString *databaseURL = [NSString stringWithFormat:@"%@_process.jpg",newIDString]; 
dataCeter.dataSix = databaseURL; 

[self showCaption]; 

} 

가 손상하지 않도록 이미지를 저장에 더 나은 방법이있다 :

여기에 이미지를 저장하는 내 코드는? 또한 이미지를 검사하면 이미지가 손상되어 어떻게 다시 충돌하지 않을 것입니까? 나는 imageData가 FF d8로 시작하고 d9 ff로 끝나야한다고 들었다.

감사
Coulton

답변

2

코드는 다 잘만 가정,하지만 당신은 정말 일부의 반환 값과 오류를 확인해야합니다. 특히 iOS에서는 일반적으로 홈 디렉토리에 쓸 수 없습니다. 그래서 파일은 아마도 전혀 저장되지 않을 것입니다.

문서 디렉토리를 사용하고 파일이 오류없이 작성되었는지 확인해야합니다. writeToFile: 호출은 성공을 나타내는 BOOL을 반환합니다.

+0

파일이 거기에 쓰여집니다. – iosfreak

+0

불어를 해독하려고해서 죄송합니다. 결국 당신이 문서 디렉토리에 글을 쓰고있는 것을 봅니다. 따라서 파일은 실제로 거기에 쓰이지 않습니다. 나는 여전히 반환 값과 오류를 확인하는 것이 좋습니다. 행운을 빕니다. – mvds

관련 문제