NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *dir = [path objectAtIndex:0];
NSString *filePath = [dir stringByAppendingPathComponent:@"my.plist"];
NSMutableDictionary *localDictionary;
NSUrl *remoteUrl = [NSURL URLWithString:@"http://server.com/my.plist"];
NSMutableDictionary *remoteDictionary = [NSMutableDictionary dictionaryWithContentsOfURL:remoteUrl];
if(remoteDictionary != nil) {
[remoteDictionary writeToFile:filePath atomically:YES];
localDictionary = remoteDictionary;
}
else {
localDictionary = [NSMutableDictionary dictionaryWithContentsOfFile:filePath];
if(localDictionary == nil) localDictionary = [NSMutableDictionary dictionary];
}
Это попытается получить копию my.plist
из http://server.com/
, в случае успеха она запишет ее на диск и укажет на нее localDictionary
, при ошибке попытается прочитать с диска (например, загруженная ранее, когда было подключение), если на диске нет файла, будет создан пустой NSMutableDictionary
. В любом случае localDictionary
будет указывать на NSMutableDictionary
в конце.
Это очень просто и будет запрашивать файл при каждом запуске кода. Вы могли бы, например, используйте NSFileModificationDate
(полученный из NSFileManger attributesOfItemAtPath:error:
) и NSDate
, чтобы определить, требуется ли обновление. Или для больших файлов версионирование также имело бы смысл, имея маленький файл, содержащий версию файла большего размера - получая маленький файл с сервера (например, с NSString
), проверяя, содержит ли файл в кэше версию с меньшим номером версии, если так, получите большой файл. Это всегда зависит от того, как часто содержимое обновляется.
См. Полную документацию: NSDictionary , NSString , NSFileManager , NSDate