Досадная ошибка: поврежденные данные JPEG: преждевременное завершение сегмента данных

#objective-c #xcode #ios4

#objective-c #xcode #ios4

Вопрос:

Это мое последнее сообщение об ошибке перед отправкой моего приложения в Apple (надеюсь), и оно сводит меня с ума. При сохранении изображения на мой телефон файл повреждается. При попытке открыть файл он выдает ошибку Corrupt JPEG data: premature end of data segment и вылетает.

Вот мой код для сохранения изображения:

 - (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 .. что-то в этом роде.

Спасибо
Коултону

Ответ №1:

Предполагается, что в вашем коде все идет хорошо, но вам действительно следует проверить некоторые возвращаемые значения и ошибки. В частности, на iOS вам обычно не разрешается выполнять запись в домашний каталог. Таким образом, файл, вероятно, вообще не сохранен.

Вы должны использовать каталог documents и убедиться, что файл записан без ошибок. writeToFile: Вызов возвращает BOOL, указывающий на успех.

Комментарии:

1. Извините, что пытался расшифровать ваш французский. Я вижу, что вы все-таки выполняете запись в каталог documents. Таким образом, файлы на самом деле туда не записываются. Я все же советую проверить возвращаемые значения и ошибки. Удачи.