Если бы вам пришлось, вы могли бы бросить свой собственный .. используя FIFO с одним писателем / одним читателем или очередями.
Core Data не так сложно, как вы описываете.
Как правило, приложение iPhone имеет «главный» контекст управляемого объекта, который обычно принадлежит делегату приложения. Пока вы можете получить делегат приложения (подсказка: [[UIApplication sharedApplication] делегат]
), у вас есть доступ к контексту управляемого объекта. Мне нравится определять статическую глобальную переменную для хранения ссылки на делегата моего приложения, чтобы упростить жизнь.
Обычно существует однозначное соответствие между экземплярами NSFetchedResultsController
и UITableView
экземпляры. Помимо заполнения представлений таблиц, это В очень редких случаях вам может понадобиться NSFetchedResultsController
. Если у вас есть несколько похожих представлений (например, панель вкладок, которая позволяет просматривать одни и те же данные по-разному, как в приложении iPod), вам следует создать единственный базовый класс, который настраивает NSFetchedResultsController
и извлеките из него свои конкретные контроллеры представления.
Теперь, когда вы создаете контроллеры представления для редактирования объекта, обычно рекомендуется делать это в отдельном контексте управляемого объекта. Если пользователь отменяет, вы просто отбрасываете контекст, и изменения исчезают. Опять же, вам действительно не нужен NSFetchedResultsController
для этого, потому что эти представления связаны только с одним объектом.
Когда вы закончите редактирование, вы сохраните:
управляемый контекст объекта. Объекты, которые управляют контекстами других управляемых объектов, должны реализовывать методы NSFetchedResultsControllerDelegate
, чтобы синхронизировать представление таблицы. Опять же, это может быть реализовано в базовом классе, чтобы вы могли обобщить эту функциональность для связанных контроллеров представления.
Вы обязательно должны использовать модель CoreData, или что-то, использующее NSCoder (NSArchiver, NSKeyedArchiver, и т. Д.), Будет работать? Я обнаружил, что CoreData является излишним для большинства приложений.
Кроме того, не могли бы вы пояснить, почему вы не можете использовать подход, использующий синглтоны? Я без проблем использовал одноэлементные фабрики в ряде приложений. Довольно легко определить методы уровня класса, которые работают с совместно используемым (одноэлементным) экземпляром.