2010-08-27 3 views
2

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

ответ

1

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

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

Альтернативно вы можете искать другие способы хранения ваших данных: пользовательские настройки по умолчанию или базы данных sqlite. Хранение данных в облаке имеет смысл только в некоторых случаях, например, если вы хотите поделиться им между различными устройствами или хотите обновить его удаленно. Лучше избегать его, если это возможно.

+0

Это лучше всего делать это хорошо, и не избежать. Например. обновлять данные, когда есть соединение и обновление, а также кэшировать его локально. Сохраните версию данных или дату обновления в plist с помощью 'NSMutableDictionary'. – Thomas

+0

Привет, я бы обновил его удаленно. Может быть, что-то вроде, я могу отправить предупреждение, сообщающее пользователю, что обновление доступно и т. Д. Или как приложение YouTube, как он хранит/извлекает все данные? – Stefan

+0

Привет, Томас, как я могу достичь метода, который вы предлагаете? – Stefan

2
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

+0

Привет, my.plist является файлом веб-страницы или? Извините, я до сих пор не знаком с этим. Является ли сервер бесплатным для использования сервиса? Спасибо за помощь – Stefan

+0

my.plist - это всего лишь файл plist (см. Http://en.wikipedia.org/wiki/Property_list), который очень удобно использовать для небольших объемов данных, поскольку вы можете сериализовать и записать его в файл с помощью только одна команда и обратный процесс в одной команде. Сервер - это то, что вам нужно, чтобы получить свое «я», обычно вам нужен домен (возможно, 2 поддомена, которые могут быть перенаправлены на другой сервер, если один идет вниз). Вместо веб-сервера (http) вы также можете использовать FTP-сервер. Если вам нужна помощь в этом, вы должны спросить где-то еще, поскольку хостинг - это не программирование. – Thomas

Смежные вопросы