Лучший способ сохранить ›массив размером 1 МБ в iCloud?

До сих пор я использовал NSUbiquitousKeyValueStore предложения Apple для хранения массива текста и изображений в iCloud, и я аналогичным образом загружаю эту информацию обратно в свое приложение, когда это необходимо (поддержка нескольких устройств и т. Д.).

Однако теперь я понял, что ограничения на хранение NSUbiquitousKeyValueStore не позволяют хранить столько информации, сколько мне нужно. У меня есть один массив текста, а другой - изображений (текстовый массив может хранить довольно большие объемы текста из-за размера текста), но массив изображений не может содержать высококачественное изображение.

У меня вопрос: как лучше всего очень просто хранить NSArray в iCloud, не достигая каких-либо значительно небольших пределов хранилища? Я изучил CloudKit, в котором используется хранилище стилей записи, и я мог бы адаптировать его для использования в своем приложении, но будет ли это лучшим способом?

Спасибо.


person Community    schedule 08.02.2015    source источник
comment
Согласно документации для NSUbiquitousKeyValueStore, общий объем пространства, доступного в хранилище ключей и значений вашего приложения для данного пользователя, составляет 1 МБ. Поэтому CloudKit звучит так, как будто это был бы хороший вариант, учитывая, что вы уже используете iCloud, поэтому у ваших пользователей уже будет iCloud ID, а объем памяти, который Apple предоставляет бесплатно, начинается с 5 ГБ. К сожалению, я не использовал CloudKit, поэтому у меня нет кода, которым можно поделиться, и я недостаточно знаю об его ограничениях.   -  person Robotic Cat    schedule 09.02.2015
comment
CloudKit, я согласен, звучит как решение, но я не знаю, с чего начать. У меня есть контейнер iCloud, и я сохраняю запись в тип записи, который я создал на панели инструментов, но как мне получить информацию для записи? Кажется, требуется ID записи?   -  person    schedule 09.02.2015
comment
Лучшая информация, которую я видел на CloudKit, - это видеоролики WWDC 2014 от Apple, в которых рассказывается, как ее использовать. Загрузите видео по адресу: developer.apple.com/videos/wwdc/2014. Это видео #208 Introducing CloudKit и #231 Advanced CloudKit. Существует также руководство Рэя Вендерлиха: raywenderlich.com/83116/beginning-cloudkit-tutorial < / а>   -  person Robotic Cat    schedule 09.02.2015
comment
Взглянув на ссылки, которые вы предоставили сейчас, задайтесь вопросом: из-за структуры базы данных CloudKit, в каком формате я буду хранить NSArray? Это означает, что мне придется создавать запись и каждый раз просто перезаписывать эту запись новым измененным массивом? Похоже, CloudKit не предназначен для хранения подобных данных. С помощью NSUbiquitousKeyValueStore я смог установить массив с ключом, что показалось немного более эффективным. Мысли?   -  person    schedule 09.02.2015
comment
Я не эксперт по CloudKit, так как не использовал его, но что я вынес из видеороликов, так это то, что он больше похож на CoreData по концепции, но намного проще в исполнении, поскольку он передает ответственность за функциональность приложению. Поэтому я бы ожидал, что каждый объект в массиве будет отдельной записью в базе данных (и у вас могут быть разные типы записей), а не хранить NSArray напрямую. Затем вы можете загрузить NSArray и использовать NSArray внутри приложения (или, возможно, использовать записи напрямую, но кэшировать себя?). Но я мог ошибаться ...   -  person Robotic Cat    schedule 09.02.2015
comment
Имеет смысл, поскольку именно так следует использовать такие структуры базы данных. Ключевое слово должно быть. Создание новой записи для каждой записи в моем постоянно растущем массиве может показаться излишним. Загружая массив напрямую, я бы имитировал функциональность NSUbiquitousKeyValueStore, но резко увеличил свои возможности хранения, а это именно то, что мне нужно. Но одобрит ли это Apple ...   -  person    schedule 09.02.2015


Ответы (1)


Я смог ответить на свой вопрос с помощью Robotic Cat. CloudKit кажется лучшим ответом на мою ситуацию. Я смог использовать частную базу данных моего настраиваемого контейнера iCloud для хранения и получения информации. На данный момент моя единственная дилемма заключается в том, идти ли традиционным путем и создавать новую запись для каждой записи, которая обычно идет в мой массив, или просто отслеживать изменения в моем приложении и загружать / перезаписывать весь массив как одну запись .

person Community    schedule 09.02.2015
comment
Я бы попытался свести к минимуму попытки перезаписать все записи при сохранении (возможно, есть суточные CloudKit лимиты передачи?), А скорее выполнять инкрементные загрузки и выгрузки. Вероятно, это означает наличие синглтона с фоном, асинхронную синхронизацию с CloudKit - это также позволит одновременно использовать частные и общедоступные базы данных. - person Robotic Cat; 09.02.2015
comment
Кроме того, я поражен тем, как быстро вы начали CloudKit работать - CoreData потребовалось бы больше времени. - person Robotic Cat; 09.02.2015
comment
Это было довольно гладко. Сейчас я собираюсь обойти все локальные хранилища, которые я делал, а затем просто загрузить эти строки / данные непосредственно в iCloud в качестве записи с именем строки в качестве идентификатора записи. Придется переделать кучу моего кода, так что это не весело. - person ; 09.02.2015