2010-11-07 2 views
1

Я загружаю и сохраняю изображение радара (в формате .gif) с помощью сети с помощью NSURLConnection. В методе connectionDidFinishLoading: я создаю изображение, используя [UIImage imageWithData:].Загрузка и сохранение изображения, которое может быть пустым

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    // Problem is here. mutableData declared earlier. 
    UIImage *baseImage = [UIImage imageWithData:mutableData]; 

    if (baseImage) 
    { 
     // do stuff with image 
    } 

    [mutableData release]; 
} 

Проблема в том, что изображения, которые я загружаю, когда-то пустые и имеют четкий фон. Это НЕ ошибка в изображении (иногда на радаре нет ничего, чтобы вернуться). Но когда это произойдет, я получаю эту ошибку в консоли. Ошибка также может возникать, когда изображение имеет очень небольшое количество пикселей (1 или 2).

Error: ImageIO: malformed GIF frame#0 (600 x 550) 

При возникновении ошибки изображение, созданное, равно нулю. 600x550 - это размер в пикселях изображения, который я загружаю. Таким образом, возвращенное изображение в nil, что заставляет его казаться, что загрузка не удалась.

Следует отметить, что baseImage может выйти из строя в 2 случаях, указанных выше, или когда я загружаю изображение, указанное на сервере, которого на самом деле там нет. Во втором случае mutableData содержит строку ошибки. Мне все еще нужен второй случай, чтобы я потерпел неудачу, поэтому я знаю, что изображение не было успешно загружено.

Что мне нужно сделать в этом случае, на самом деле создать пустое изображение и сохранить его, чтобы пользователь мог убедиться, что загрузка выполнена правильно.

Любые идеи?

Спасибо, Росс

+0

Чтобы попытаться дать более подробную информацию, я собираюсь приложить образец изображения. Мне в основном нужен способ сделать UIImage из этого. Это изображение не полностью пустое (имеет 1 пиксель), но все еще не работает. (https://files.me.com/ross.kimes/6cuagt) –

ответ

2

Используя этот код:

NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://files.me.com/ross.kimes/6cuagt"]]; 
UIImage *image = [UIImage imageWithData:data]; 
NSLog(@"%@", image); 

Я боюсь, что я не получаю ошибки в консоли и действительного объекта UIImage :(


Я полагаю что вы можете обнаружить наличие строки = - то есть NSSTring stringWithData: encoding: - если это допустимая строка, а изображение - нуль, вы, вероятно, можете предположить, что это er Сообщение ror?

+0

Тот факт, что вы не получили никаких ошибок, дал мне представление о том, в чем проблема. Я работал с iOS 4.2 на моем iPad и iPhone. Используя код, который у вас был выше, он терпел неудачу для меня. При попытке использовать 4.1 в симуляторе, он работал нормально. Я собираюсь занять устройство 4.1 у друга для подтверждения. Благодаря! –

+0

В этом случае стоит ли сообщать отчет об ошибке для яблока - очевидно, что что-то изменилось между 4.1 и 4.2, что сделало его хуже, и у вас есть хороший небольшой тестовый пример для них :) – deanWombourne

+0

Да, я отправил его, как только увидел в чем проблема. Я тестировал устройство 4.1 и могу подтвердить, что это проблема. Хотелось бы, чтобы я поймал это несколько недель назад, поэтому у него есть шанс быть исправленным до того, как 4.2 станет общедоступным. Ну что ж. В очередной раз благодарим за помощь. –

0

Может быть, вы можете RY что-то вроде:

@try{ 
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"https://files.me.com/ross.kimes/6cuagt"]]; 
UIImage *image = [UIImage imageWithData:data]; 
}@catch (NSException *ex) { 
//Something goes wrong, create the image 
}