Хранилище данных для гибридного приложения Mac / iPhone - PullRequest
1 голос
/ 14 января 2009

Я занимался разработкой для iPhone последние 5 месяцев или около того и использовал FMDB Гуса Мюллера для взаимодействия с базой данных. В моем следующем проекте будут и приложения для Mac, и для iPhone, и они будут обмениваться данными между собой, хотя в итоге iPhone будет в основном приложением для просмотра с некоторыми незначительными возможностями редактирования.

У меня такой вопрос: смогут ли Core Data сделать мою жизнь на стороне Mac достаточно легкой, чтобы стоило написать дважды мою модель данных, используя Core Data на Mac и FMDB на iPhone? Или мне просто использовать FMDB для обоих, чтобы я мог повторно использовать один и тот же код для Mac и iPhone?

Я немного поковырялся в Core Data, но не сильно (в основном это только примеры из книги Хиллегаса), поэтому любые конкретные примеры в пользу Core Data будут высоко оценены. Кстати, мне действительно нравится FMDB, мне просто интересно, позволят ли Core Data сделать мою жизнь намного проще в этой ситуации.

Edit: Я понимаю основные различия между FMDB и Core Data, в основном я хочу выяснить, дает ли Core Data «бесплатно» смысл кодировать мою модель данных дважды.

Ответы [ 7 ]

13 голосов
/ 14 января 2009

Основное отличие состоит в том, что FMDB - это оболочка Obj-C для SQLite, тогда как CoreData - это объектная модель, которая хранит данные в SQLite (вы не редактируете базу данных, а редактируете объекты). Это означает, что это немного более высокий уровень и обеспечивает больше абстракции, но если вы знаете, что делаете с базами данных, то с вами должно быть все в порядке. Лично я допустил бы ошибку при совместном использовании кода, поскольку это приводит к уменьшению количества ошибок, упрощению разработки и более быстрым выпускам.

4 голосов
/ 14 января 2009

Возможно, вы также захотите изучить структуру OmniDataObjects от OmniGroup. Он реализует подмножество функциональных возможностей CoreData поверх SQLite как в OS X, так и в iPhone OS. Я полагаю, они использовали его как в версиях OmniFocus для OS X, так и для iPhone.

3 голосов
/ 15 июля 2009

Таким образом, к настоящему моменту это может быть полностью решено, но для потомков я хотел бы отметить, что с iPhone OS 3.0 Core Data составляет на iPhone, и если вы хотите использовать его ваши приложения Mac, вы можете поделиться большой работой с вашим приложением iPhone.

1 голос
/ 14 января 2009

Я не знаю, к какому типу данных относится ваш проект, но если он каким-либо образом касается записей о людях и если количество записей достаточно мало, у вас также есть возможность использовать встроенную адресную книгу ( Класс ABAddressBook) в качестве базы данных.

Это позволяет вам добавлять свойства, которые являются уникальными для вашего приложения (которые не видны в других приложениях, которые их не используют), и вы получаете синхронизацию между iPhone и Mac абсолютно бесплатно.

1 голос
/ 14 января 2009

Преимущества Core Data в том, что это структура управления графами объектов, которая сохраняется в хранилище данных SQLite (или двоичного, или XML, или пользовательского). Таким образом, он управляет ошибками отдельных экземпляров объекта и двунаправленными (в том числе многим) отношениями между объектами (включая несколько вариантов распространения или запрета удалений на основе этих отношений), а также проверяет ограничения на свойства и отношения отдельных объектов (включая обязательные необязательно, количество элементов, диапазон и т. д.). В OS X 10.5 он также включает инструменты для полуавтоматической миграции хранилищ данных между схемами модели.

Недостатком, конечно, является то, что он не доступен на iPhone. Если FMDB отвечает вашим потребностям, вам будет гораздо проще управлять одной базой кода, а не двумя.

И последний вариант, если вам может потребоваться Leopard для вашего настольного приложения, это написать подкласс NSAtomicStore с использованием FMDB. NSAtomicStore должен будет считывать все хранилище в память - таким образом, вы потеряете некоторые преимущества SQLite на настольном клиенте - но поскольку данные будут передаваться на iPhone, я думаю, у вас не будет такого большого количества данных в любом случае. При таком подходе вы можете использовать Базовые данные на стороне клиента и FMDB на iPhone с общей моделью данных / хранилищем данных для обоих.

1 голос
/ 14 января 2009

Совместное использование кода - это хорошо, но в зависимости от того, насколько похожи ваша модель и класс контроллеров модели, вы можете не захотеть полностью сбрасывать со счетов базовые данные. Например, в дополнение к сохранению объекта вы также получаете действительно хорошую поддержку отмены / повторения «бесплатно». Возможно, вы захотите сделать быстрый прототип, чтобы определить, сколько кода вы могли бы переписать между двумя приложениями.

1 голос
/ 14 января 2009

Я согласен с Мартином. Если бы вы только писали приложение для настольного компьютера, я бы сказал, что нужно использовать Core Data. Поскольку вы делаете и то, и другое, возможность возникновения проблем при попытке конвертирования между моделями хранения действительно указывает на использование FMDB для настольных компьютеров и телефонов.

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