IOS Controlla se il file remoto ha aggiornamenti prima di scaricare
-
21-12-2019 - |
Domanda
Questa è una domanda a due parti. Sto usando NSXMLParser per scaricare un feed RSS.
NSURL *url = [NSURL URLWithString:@"linktorssxml"];
parser = [[NSXMLParser alloc] initWithContentsOfURL:url];
[parser setDelegate:self];
[parser setShouldResolveExternalEntities:NO];
[parser parse];
.
Mi chiedevo se c'è un modo per leggere semplicemente l'intestazione dell'XML da remoto e controllare l'ultimo aggiornamento TimeStamp, in modo da poter eseguire il codice parser e quindi tirare l'intero XML se c'è stata una modifica? .
Inoltre, come ho detto che questa è una domanda a due parti. Ho lo stesso pensiero con una plist che è ospitata esternamente.Questo è attualmente chiamato come segue: -
_content = [[NSArray alloc] initWithContentsOfURL:[NSURL URLWithString:@"pathto.plist"]];
.
Ancora una volta, c'è un modo per controllare l'intestazione per l'ultimo tempo di aggiornamento da remoto, e quindi solo scaricando il file completo se c'è stato un cambiamento?
Soluzione
Sì, ma è necessario utilizzare NSURLConnection
o NSURLSession
per scaricare i dati invece di chiedere NSXMLParser
per farlo.
È possibile ottenere le intestazioni HTTP (che probabilmente includono un'ultima data modificata) utilizzando un NSMutableURLRequest
per descrivere ciò che desideri.Che ha un metodo denominato setHTTPMethod:
e puoi impostare il metodo su HEAD
.Effettuare la connessione, prendi le intestazioni e decidi cosa fare dopo.
A meno che l'XML non sia molto grande, questo probabilmente non è l'approccio più efficace.Se il file è stato modificato, è necessario effettuare una seconda richiesta di rete per ottenerlo.Le richieste di rete sono lente, quindi dovresti tenerle al minimo.Nella maggior parte dei casi sarebbe meglio usare NSURLConnection
o NSURLSession
per ottenere il file.La risposta includerà le intestazioni HTTP, quindi hai ancora la data, e puoi comunque decidere se eseguire o meno il parser.