Файлы Plist - это еще один вариант, если вы хотите управлять своим собственным хранилищем в файловой системе. NSArray и NSDictionary предоставляют методы для записи и чтения этих коллекций в файлы plist и из них, если вы можете хранить все свои данные в одном из поддерживаемых типов данных plist. Подробности см. В Руководстве по программированию Список свойств . Это может быть хорошим вариантом, если вы можете легко разбить ваши данные на отдельные файлы и всегда хотеть загрузить весь файл сразу.
CoreData - мощный инструмент, особенно если вы хотите хранить график объектов. Это может быть правильным выбором, если вы хотите иметь возможность легко хранить и загружать объекты модели.
SQLite отлично подходит, если вы хотите хранить реляционные данные и выполнять запросы к ним. Это может быть хорошим выбором, если вам нужны быстрые и эффективные запросы, но вам не нужно преобразовывать результаты в объекты модели (или есть какая-то причина для написания собственного слоя ORM).
Как вы упомянули, NSUserDefaults - это удобный инструмент для хранения учетных данных пользователя, но он не предназначен для больших объемов данных. Это также позволяет вам выставлять настройки в приложении настроек, чтобы пользователь мог настроить поведение приложения в одном общем месте без запуска приложения.
Любая форма файлового хранилища может иметь дополнительное значение, если вы хотите предоставить эти файлы пользователю через настройки общего доступа к файлам, позволяя данным приложения появляться в каталоге «Документы iTunes» при синхронизации с ПК.
Независимо от механизма хранения, который вы используете, каждый из этих параметров требует, чтобы вы управляли какой-то схемой для ваших данных.
Вам необходимо отслеживать формат, в котором хранятся ваши данные, в каждой версии вашего приложения. Каждый раз, когда вы изменяете свое ожидание формата сохраненных данных, вам необходимо поддерживать старые версии. Я вижу, что после обновления происходит сбой слишком многих приложений, потому что они не обрабатывают данные, сохраненные старыми версиями приложения, или предполагают, что пользователи установят и запустят каждую версию приложения вместо пропуска некоторых обновлений.
CoreData имеет некоторую поддержку для переноса данных из одной схемы в другую, но это то, что требует от разработчиков работы, осведомленности и тестирования во всех случаях.