Поддержка iCloud в приложении для Mac OS X Lion

В Mac OS X (10.7 Lion) приложение, не основанное на документах, я хочу включить поддержку iCloud, чтобы я мог обмениваться данными между другими экземплярами того же приложения на других компьютерах Mac (не на устройствах iOS). Немного просмотрев документацию Apple, я обнаружил, что должен использовать хранилище списка значений ключа в iCloud, поскольку документ, который я хочу загрузить, содержит только массив пользовательских объектов (которые имеют простые свойства, такие как имя (строка) , дата (объект даты), ...). Этот файл — единственное, что я хочу загрузить в iCloud. Внутри приложения я уже реализовал сохранение файла на диск с помощью NSFileManager- (void)writeData:(NSData*)data toPath:(NSString *)path (или как там было, забыл). Он загружается из файла с помощью NSFileManager снова (используя - (NSData *)dataInFileAtPath:(NSString*)path или что-то еще). Файл хранится в подкаталоге пользовательского каталога поддержки приложений. Он сохраняется всякий раз, когда в массив добавляется новый элемент или изменяется элемент в массиве.

Мне было интересно, может ли кто-нибудь предоставить ссылку на учебник или указать мне правильное направление, чтобы записать этот файл в iCloud, а затем снова загрузить его в другие экземпляры того же приложения? Все руководства и документация, которые я нашел, были только для iOS. Любая помощь будет оценена!

Заранее спасибо!

Бен


person GravityScore    schedule 16.01.2012    source источник


Ответы (1)


Просто используйте NSUbiquitousKeyValueStore, который очень похож на NSUserDefaults, за исключением того, что он записывается в iCloud. Вам следует прочитать Хранилище iCloud. раздел руководства по программированию приложений для Mac, но то, что вам нужно сделать, может быть таким же простым, как включить права на вкладке «Сводка» вашего целевого приложения в Xcode, а затем сделать что-то вроде:

NSData *dataToStore = [NSKeyedArchiver dataWithRootObject:yourArray];
[[NSUbiquitousKeyValueStore defaultStore] setData:dataToStore forKey:@"yourKey"]; 

Затем, чтобы получить ваши данные, просто выполните

NSData *retrievedData = [[NSUbiquitousKeyValueStore defaultStore] dataForKey:@"yourKey"];
NSArray *retrievedArray = [NSKeyedUnarchiver unarchiveObjectWithData:retrievedData];

Единственное предостережение: чтобы это работало с массивом пользовательских объектов, все эти объекты должны реализовывать Протокол NSCoding. Это просто вопрос реализации двух методов; вот хорошее руководство.

P.S. Вы используете одни и те же API независимо от того, разрабатываете ли вы для OS X или iOS, поэтому нет причин, по которым вы не могли бы просто следовать руководству iOS для хранилища iCloud.

person yuji    schedule 12.02.2012