iOS Проверьте наличие обновлений в удаленном файле перед загрузкой

StackOverflow https://stackoverflow.com//questions/23014900

Вопрос

Это вопрос из двух частей.Я использую NSXMLParser для загрузки RSS-канала.

NSURL *url = [NSURL URLWithString:@"linktorssxml"];
parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser setShouldResolveExternalEntities:NO];
[parser parse];

Я задавался вопросом, есть ли способ просто прочитать заголовок XML удаленно и проверить метку времени последнего обновления, чтобы мне нужно было только запустить код синтаксического анализатора и фактически извлечь весь XML, если произошли изменения?

Далее, как я уже сказал, это вопрос, состоящий из двух частей.У меня та же мысль с plist, размещенным на внешнем сервере.В настоящее время это называется следующим образом: -

_content = [[NSArray alloc] initWithContentsOfURL:[NSURL URLWithString:@"pathto.plist"]];

Опять же, есть ли способ удаленно проверить заголовок на время последнего обновления и, таким образом, загрузить полный файл только в том случае, если произошли изменения?

Это было полезно?

Решение

Да, но вам нужно использовать NSURLConnection или NSURLSession скачать данные вместо того, чтобы спрашивать NSXMLParser сделать это для тебя.

Вы можете получить заголовки HTTP (которые, вероятно, включают дату последнего изменения), используя NSMutableURLRequest описать то, что вы хотите.У этого есть метод с именем setHTTPMethod:, и вы можете установить метод HEAD.Установите соединение, получите заголовки и решите, что делать дальше.

Однако, если XML не очень большой, это, вероятно, не самый эффективный подход.Если файл был изменен, вам просто нужно сделать второй сетевой запрос, чтобы получить его.Сетевые запросы выполняются медленно, поэтому их следует свести к минимуму.В большинстве случаев вам лучше использовать NSURLConnection или NSURLSession чтобы просто получить файл.Ответ будет включать заголовки HTTP, поэтому вы по-прежнему получите дату и сможете решить, запускать анализатор или нет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top