Как я могу обновить данные в приложении iPhone - PullRequest
2 голосов
/ 27 августа 2010

Я создаю приложение с хранилищем данных в plist. Каковы способы обновления данных? Может быть, если я создам веб-страницу и получу из нее свои данные, а не сохраню в plist? Или я могу обновить свои данные при подключении к iTunes? Или любое другое предложение? То, чего я хочу добиться, - это способ обновления моих данных после того, как пользователь загрузит приложение.

Ответы [ 2 ]

2 голосов
/ 28 августа 2010
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

1 голос
/ 27 августа 2010

Списки нелегко изменить, так как вы должны прочитать их обратно в память, внести изменения и записать их обратно в файл.

Для записи списков посмотрите метод NSDictionary или NSArray writeToFile:atomically:.Помните, что ваш plist в основном представляет собой XML, составленный из NSArrays, NSDictionaries, NSStrings и NSData, и вы всегда захотите записать корневой узел.базы данных sqlite.Хранение данных «в облаке» имеет смысл только в некоторых случаях, например, если вы хотите поделиться ими между различными устройствами или хотите обновить их удаленно.Лучше всего избегать этого, если это возможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...