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

У меня есть скрипт на 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

Решение

Пара наблюдений:

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

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

  2. Кстати, только звонок 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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]