Мне было поручено перенести персональное программное обеспечение для распознавания лиц на iOS и Mac OS X, а также помочь сохранить кроссплатформенный базовый SDK и большую часть программного обеспечения. Одна из вещей, которую один из моих коллег и я хочу сделать, — это хранить данные о лице пользователя в базе данных SQL (возможно, SQLite). Мы также хотели бы позволить пользователям размещать свои данные в iCloud, чтобы им не приходилось обучать каждое из своих устройств в отдельности, чтобы распознавать их. Меня беспокоит то, как выполнять обе эти задачи, и я сталкиваюсь с достаточным выбором, чтобы чувствовать себя подавленным. (Я все еще новичок в некоторых из задействованных технологий.)
Для реализации SQL я мог бы встроить SQLite непосредственно в свою программу и написать для него код, или я мог бы использовать Core Data и заставить его общаться с SQLite для меня. (База данных не предназначена для совместного использования, так что все в порядке. И SQL это не весело.) Однако Core Data совсем не переносима (не говоря уже о том, что она не предназначена для модели, закодированной как объекты C ++), тогда как запись непосредственно для SQL могла бы значит, мы могли бы использовать больше кода на других платформах.
Ситуация усложняется при использовании iCloud, у которого есть пять или шесть возможных способов интеграции с программой. Единственный метод, который я до сих пор окончательно исключил, — это хранилище ключей-значений iCloud. (По крайней мере, есть большая вероятность, что у пользователя возникнут проблемы с лимитом в 1 МБ, и он явно не предназначен для чего-либо столь сложного, как я имею в виду.) Базовые данные могут интегрироваться с iCloud через UIManagedDocument или NSPersistentStore. , но, опять же, это означает меньше в плане многоразового использования кода. Я могу использовать SQLite вместе с UIDocument или NSDocument, но то, что я пытаюсь сделать, похоже, не совсем то, для чего предназначались эти объекты. Файлы, с которыми я имею дело, являются по существу большими файлами предпочтений, не предназначенными для непосредственного взаимодействия с конечными пользователями; UIDocument и NSDocument, кажется, предназначены для файлов, которые можно просматривать и редактировать. И еще есть iCloud Drive и CloudKit, которые все еще находятся в бета-версии. (С другой стороны, эти два должны быть выпущены довольно скоро. Учитывая, что пользователи iOS имеют тенденцию быстро обновляться до последней версии системного программного обеспечения, аргументы об использовании любого из них основаны на том, сколько устройств они смогут запустить он должен быстро стать слабым и устаревшим.)
Кто-нибудь может порекомендовать, какой путь лучше всего подходит для моих целей? Заранее спасибо.
Аарон Соломон Адельман
Во-первых, вы не хотите пытаться делиться файлом SQLite напрямую. Это очень вероятно повредит файл, потому что SQLite не был создан с учетом такого использования.
Тем не мение:
UIManagedDocument
хотя это все еще требует много других специфических для Core Data классов.Лучший подход зависит от ваших потребностей. Если вы ожидаете скопировать файлы данных из приложения iOS на другие платформы, SQLite подойдет. У вас все еще будет много платформо-зависимого кода, экономия там намного меньше. Если вы не планируете перемещать файлы данных таким образом, с Core Data, вероятно, будет легче иметь дело.