Подтвердить что ты не робот

AFNetworking setImageWithURLRequest не устанавливает удаленное изображение

Я использую AFNetworking UIImageView+AFNetworking.h для асинхронной загрузки онлайн-изображения на UIImageView.

Удаленное изображение загружается очень хорошо, когда я использую setImageWithURLRequest:, но когда я пытаюсь использовать setImageWithURLRequest:placeholderImage:success:failure, удаленное изображение загружается, но UIImageView не устанавливает его как UIImage.

Здесь мой код:

@property (strong) IBOutlet UIImageView *imageView;

-(void)viewDidAppear:(BOOL)animated{
    [super viewDidAppear:animated];

    [_imageView setImageWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://i.imgur.com/fVhhR.png"]]
                       placeholderImage:nil
                                success:^(NSURLRequest *request , NSHTTPURLResponse *response , UIImage *image ){
                                    NSLog(@"Loaded successfully: %d", [response statusCode]);
                                }
                                failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error){
                                    NSLog(@"failed loading: %@", error);
                                }
     ];
}

Изображение всегда загружается успешно, код состояния всегда 200. Но я должен добавить [_imageView setImage:image]; в блок success для UIImageView, чтобы установить изображение.

Я использую iOS 6.0

Любые идеи?

4b9b3361

Ответ 1

Если вы предоставите блок успеха, вы несете ответственность за настройку свойства изображения вашего UIImageView. Если вы поставили блок успеха nil, то AFNetworking сделает это за вас.

Это соответствующий раздел UIImageView+AFNetworking.m (строка 117):

if (success) {
    success(operation.request, operation.response, responseObject);
} else {
    self.image = responseObject;
}

В качестве альтернативы просто используйте -setImageWithURL:placeholderImage: без блоков завершения.

Ответ 2

У меня была такая же проблема, и после того, как я разочаровался в документах для библиотеки, я нашел то, что упоминал Робин. Итак, теперь я использую:

[imageView setImageWithURLRequest:imageRequest placeholderImage:nil success:nil failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) {
    NSLog(@"Unable to retrieve image");
}];

Работает как шарм. Надеюсь, это поможет.

Ответ 3

Документ очень ясен:

Если задан блок успеха, он отвечает за блок для установки изображения изображения перед возвратом. Если нет успеха блок задан, поведение по умолчанию установки изображения с self.image = image.

Таким образом, вы можете либо пройти нулевой блок для успеха (как упоминалось выше), либо вызвать setImage: изображение самостоятельно, если вы укажете блок

Ответ 4

В вашем блоке успеха вам нужно указать UIImaage *image на UIImageView. Я предполагаю, что вы получаете NSLog(@"Loaded successfully: %d", [response statusCode]);

Кроме того, оно выглядит следующим образом: nil. Разве вы не хотите, чтобы местозаполнитель был похож на загружаемое изображение?

Ответ 5

Для тех, кто наткнулся на эту проблему и попал сюда во время просмотра и поиска в Интернете, вот еще одна причина - изображение может иметь неправильное расширение файла. Например, изображение может быть сохранено как jpg, но кто-то решил изменить его расширение файла на png.

Здесь, как проверить это: сначала вам нужно использовать инструмент сетевого мониторинга (например, Charlie) и проверить HTTP-заголовок запроса Content-Type. Предположим, что он имеет значение "image/png". Это означает, что изображение на бэкэнде имеет расширение файла png. Теперь запустите приложение на симуляторе, затем перейдите в папку симулятора вашего приложения:

/Пользователи/вы/Library/Поддержка приложений /iPhone simulator/select-folder-with-your-iOS-версия/Приложения/YourApp/Library/Caches/yourAppBundleId/fsCachedData/

Найдите файл изображения и добавьте расширение png или jpg в этот файл (AFNetworking кэширует файлы изображений без расширения файла, поэтому его нужно добавить, чтобы открыть его с помощью Preview). Откройте его с помощью Preview и нажмите Tools/Show Inspector. Проверьте "Тип документа" на открытой панели. Если это отличается от "PNG-изображения" (например, изображение в формате JPEG), то это причина, и вам нужно исправить само изображение на бэкэнд - откройте его с помощью соответствующей программы редактирования изображений и сохраните ее как PNG.