Я занимаюсь разработкой для iPhone последние 5 месяцев или около того и использую FMDB Гаса Мюллера для взаимодействия с базой данных. В моем следующем проекте будет приложение для Mac и iPhone, и они будут обмениваться данными между собой, хотя в конечном итоге iPhone будет в основном приложением для просмотра с некоторыми незначительными возможностями редактирования.
У меня такой вопрос: смогут ли Core Data сделать мою жизнь достаточно легкой для Mac, чтобы стоило написать мою модель данных дважды, используя Core Data на Mac и FMDB на iPhone? Или мне просто использовать FMDB для обоих, чтобы я мог повторно использовать один и тот же код как для Mac, так и для iPhone?
Я немного потыкался в Core Data, но не слишком много (в основном это просто примеры из книги Hillegas), поэтому любые конкретные примеры в пользу Core Data были бы очень признательны. Для записи, мне очень нравится FMDB, мне просто интересно, смогут ли Core Data сделать мою жизнь намного проще в этой ситуации.
Редактировать: Я понимаю основные различия между FMDB и Core Data, я в основном пытаюсь выяснить, стоит ли то, что Core Data предоставляет «бесплатно», оправдать кодирование моей модели данных дважды.





Основное отличие состоит в том, что FMDB - это оболочка Obj-C для SQLite, тогда как CoreData - это объектная модель, которая хранит данные в SQLite (вы не редактируете базу данных, а вместо этого редактируете объекты). Это означает, что это немного более высокий уровень и обеспечивает больше абстракции, но если вы знаете, что делаете с базами данных, то вам должно быть все в порядке. Лично я ошибаюсь в отношении совместного использования кода, поскольку это приводит к меньшему количеству ошибок, упрощению разработки и более быстрым выпускам.
Я согласен с Мартином. Если бы вы были Только, пишущим настольное приложение, я бы сказал, что используйте Core Data. Поскольку вы делаете и то, и другое, возможность проблем при попытке преобразования между моделями хранения действительно указывает на использование FMDB как для настольных компьютеров, так и для телефонов.
Совместное использование кода - это хорошо, но в зависимости от того, насколько похожи ваша модель и классы контроллера модели, вы можете не захотеть полностью сбрасывать со счетов Core Data. Например, в дополнение к сохранению объекта вы также получаете действительно хорошую поддержку отмены / повтора «бесплатно». Вы можете сделать быстрый прототип, чтобы оценить, сколько кода вы можете в конечном итоге переписать между двумя приложениями.
Вы также можете изучить структуру OmniDataObjects от OmniGroup. Он реализует подмножество функций CoreData поверх SQLite как в OS X, так и в iPhone OS. Я считаю, что они использовали его как в версиях OmniFocus для OS X, так и в iPhone.
Преимущества Core Data заключаются в том, что это структура управления графом объектов, которая сохраняется в хранилище данных SQLite (либо в двоичном, либо в XML, либо в пользовательском). Таким образом, он управляет ошибкой отдельных экземпляров объекта и двунаправленными (включая ко многим) отношениями между объектами (включая несколько вариантов распространения или отклонения удалений на основе этих отношений), а также проверкой ограничений на свойства и отношения отдельных объектов (включая обязательные / необязательный, количество элементов, диапазон и т. д.). В OS X 10.5 он также включает инструменты для полуавтоматической миграции хранилищ данных между схемами модели.
Обратной стороной, конечно же, является то, что он недоступен на iPhone. Если FMDB отвечает вашим потребностям, вам может быть намного проще управлять одной базой кода, чем двумя.
Последний вариант, если вам может потребоваться Leopard для своего настольного приложения, - это написать подкласс NSAtomicStore с использованием FMDB. NSAtomicStore должен будет считывать все хранилище в память - таким образом, вы потеряете некоторые преимущества SQLite на настольном клиенте - но поскольку данные будут совместно использоваться на iPhone, я предполагаю, что у вас не будет такого большого количества данных. в любом случае. При таком подходе вы можете использовать Core Data на стороне клиента и FMDB на iPhone с общей моделью данных / хранилищем данных для обоих.
Я не знаю, какой тип данных включает в себя ваш проект, но если он каким-либо образом имеет дело с записями людей и если количество записей достаточно мало, у вас также есть возможность использовать встроенную адресную книгу (класс ABAddressBook). как база данных.
Это позволяет вам добавлять свойства, уникальные для вашего приложения (которые не видны в других приложениях, которые их не используют), и вы получаете синхронизацию между iPhone и Mac абсолютно бесплатно.
Итак, это может быть полностью решено к настоящему времени, но для потомков я хотел бы упомянуть, что с iPhone OS 3.0 Core Data является на iPhone, и если вы хотите использовать его в своих приложениях Mac, вы можете поделиться множеством работы с вашим iPhone-приложением.