NSURLConnection originalRequest выбрасывает исключение в iOS 4, что я могу использовать вместо этого?

В iOS 5 [NSURLConnection originalRequest] работает нормально, однако в iOS 4 выдает исключение:

- [NSURLConnection originalRequest]: нераспознанный селектор отправлен на экземпляр 0x65609a0

Похоже, что iOS 4.3 SDK не имеет originalRequest метод.

Что я могу использовать вместо этого, чтобы получить NSURLConnectionоригинальный запрос в iOS 4?

2 ответа

Решение

Я сделал следующее: я создал NSString *origiOS4 и если работающей ОС является iOS4, то я инициализирую строку и даю ей значение urls. в connection:didReceiveData: Метод, то я прочитал значение из origiOS4,

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
    float version = [[[UIDevice currentDevice] systemVersion] floatValue];
    if (version < 5) {
        origiOS4 = [[NSString alloc] initWithString:response.URL.absoluteString];
    }
}

Читая заголовочный файл NSURLConnection.h - вы увидите следующий комментарий:

When created, an NSURLConnection performs a deep-copy of the
    NSURLRequest.  This copy is available through the
    -originalRequest method.  As the connection performs the load,
    this request may change as a result of protocol
    canonicalization or due to following redirects.
    -currentRequest can be used to retrieve this value.

Поскольку этот метод был представлен в iOS5, вы не сможете использовать его в iOS4.3 или более ранней версии. Так что в этом случае вам нужно будет продублировать функциональность нового метода.

Если вы используете очень простой объект NSURLRequest, это может быть так же просто, как сделать [запрос копии] перед инициализацией NSURLConnection, в противном случае вам нужно будет посмотреть, как реализовать глубокую копию. NSURLRequest реализует NSCoding, так что вы можете, вероятно, архивировать и разархивировать, чтобы сделать глубокую копию, если это то, что вам нужно.

Другие вопросы по тегам