2011-04-11 2 views
0

Ceci est mon dernier message d'erreur avant de soumettre mon application à Apple (j'espère) et cela me rend fou. Lorsque vous enregistrez une image sur mon téléphone, cela corrompt le fichier. Quand il a essayé d'ouvrir le fichier, il me donne erreur Corrupt JPEG data: premature end of data segment et se bloque.Erreur ennuyeuse: données JPEG corrompues: fin prématurée du segment de données

Voici mon code pour enregistrer l'image:

- (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]; 

} 

est-il une meilleure méthode pour sauver des images afin qu'ils ne se corrompre? Aussi, comment vérifiez-vous qu'une image est corrompue pour que vous ne vous écrasiez plus jamais? J'ai entendu que l'imageData devrait commencer avec FF d8 et se terminer par d9 ff .. quelque chose comme ça.

Merci
Coulton

Répondre

2

Votre code suppose tout va bien, mais vous devriez vraiment vérifier certaines valeurs de retour et les erreurs. En particulier, sur iOS, vous n'êtes normalement pas autorisé à écrire dans le répertoire personnel. Donc le fichier n'est probablement pas sauvegardé du tout.

Vous devez utiliser le répertoire de documents et vérifier que le fichier est écrit sans erreur. L'appel writeToFile: renvoie un BOOL indiquant le succès.

+0

Les fichiers sont écrits ici. – iosfreak

+0

Désolé d'essayer de déchiffrer votre français. Je vois que vous écrivez dans le répertoire des documents après tout. Donc, les fichiers ne sont pas écrits ici. Je conseille toujours de vérifier les valeurs de retour et les erreurs. Bonne chance. – mvds

Questions connexes