Как использовать PHP, чтобы вернуть изображение в Objective-C?

0

У меня есть скрипт на PHP, который захватывает изображение на моем сервере. Я хочу, чтобы он мог отправить его в Objective-C. Я попробовал множество методов, которые я нашел, чтобы вернуть изображение, и ни один из них, похоже, не работает. У меня есть изображение, сохраненное на моем сервере в каталоге, и я хочу, чтобы его можно было отправить в мое приложение. Это мой текущий код:

Код просто не меняет изображение. Я не уверен, как проверить правильность отправки PHP.

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"myserverurl"]];
    [request setHTTPMethod:@"POST"];

    NSString *body = @"username=benr783&password=testpassword";
    [request setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];
    NSURLConnection *connect = [[NSURLConnection alloc] initWithRequest:request delegate:self];
    [connect start];

}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    self.image.image = [UIImage imageWithData:data];

}
  • 0
    Вы проверили data в didReceiveData действительно изображение? PHP отвечает с типом содержимого изображения?
  • 0
    @Raptor, как мне это проверить?
Показать ещё 1 комментарий
Теги:
nsurlconnection

1 ответ

0

Несколько замечаний:

  1. Предполагается, что вы получите полное изображение с помощью одного вызова метода didReceiveData. Это не допустимое предположение. (На самом деле, если ваши изображения тривиально малы, это на самом деле маловероятно.)

    Прежде чем начать свое соединение, NSMutableData экземпляр объекта NSMutableData, в didReceiveData, вы должны просто добавить полученные данные к этому NSMutableData, а затем в connectionDidFinishLoading, как только вы объедините все данные, полученные в нескольких вызовах didReceiveData в одну NSMutableData, теперь вы можете взять эту окончательную NSMutableData и попытаться преобразовать ее в UIImage.

  2. BTW, только start вызова, если вы используете исполнение initWithRequest с опцией startImmediately и с этой опцией установлено значение NO (которое вы используете только в особых обстоятельствах). В этом случае просто удалите этот start вызов.

  3. Вы должны проверить, действительно ли полученные данные являются изображением. Например, в didReceiveResponse убедитесь, что NSURLResponse имеет statusCode 200. Убедитесь, что didFailWithError не был вызван. И т.п.

    - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
        if ([response isKindOfClass:[NSHTTPURLResponse class]]) {
            int statusCode = [(NSHTTPURLResponse *)response statusCode];
            if (statusCode != 200) {
                NSLog(@"statusCode != 200; it is %ld", (long)statusCode);
            }
        }
    }
    
  4. Вы можете посмотреть, как эта транзакция происходит с использованием Чарльза, и убедитесь, что это изображение в ответ и т.д.

  • 0
    Если изображение падает несколько раз, как мне получить все сразу?
  • 0
    Вы не можете это контролировать. Вы должны предположить, что это сойдет по частям. Таким образом, создайте свойство NSMutableData , создав NSMutableData экземпляр в [NSMutableData data] перед началом подключения, didReceiveData просто didReceiveData полученные данные в NSMutableData , и преобразовав их только в UIImage в connectionDidFinishLoading .
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню