2009-08-13 1 views
6

Я пытаюсь решить, должно ли какое-либо состояние приложения, особенно выбранный элемент в списке, храниться в Core Data или NSUserDefaults.Когда состояние приложения принадлежит в Core Data вместо NSUserDefaults?

Как правило, я считаю, что предпочтения и состояние приложения должны сохраняться в NSUserDefaults, а данные на уровне модели должны сохраняться в других местах, например, в Core Data. Моя модель до сих пор:

  • Должны ли данные храниться вообще? Если пользователь не будет разумно ожидать, что она будет, а затем бросить его (например, положение курсора не сохраняется в TextEdit)
  • NSUserDefaults:
    1. Если приложение было несколько документов, установка будет применяются ко всем документам
    2. Это возможно, что данные будут сконфигурированы в настройках
    3. Имея данные за пределами модели имеет смысл для тестирования (поменяв несколько дефолтов с одной моделью магазина)
  • модель уровня
    1. Данные, очевидно, принадлежит как атрибут объекта модель уровня
    2. данные достаточно велико, что хранение ее в NSUserDefaults вызовет проблемы производительности
    3. Было бы трудно или время интенсивно для пользователя воссоздавать данные (они, безусловно, считают потерю этой информации «потери данных»)

Я планирую хранить порядок сортировки некоторых объектов в Core Data. Без этой информации (т. Е. Атрибута sortIndex или «order») каждый экземпляр объекта должен быть дополнен данными из пользовательских значений по умолчанию.

Однако сохранение состояния в модели похоже на скользкий наклон. Если я храню порядок сортировки, то также представляется целесообразным хранить выбор, поскольку они являются как состоянием списка. Данные выбора для моего варианта использования могут быть довольно большими. В частности, значки в одном списке зависят от выбора в каждом из своих подписок.

Есть ли у кого жесткая линия, которую они рисуют в отношении NSUserDefaults против модели данных?

ответ

5

Вы не упомянули, является ли это приложение на основе документов (например, TextEdit) или библиотечным (например, AddressBook).

Это может помочь вам решить, куда должна идти такая информация: принять приложение на основе документов. Предположим, что его документы попадают под контроль версий (это реально возможно при использовании типа хранилища данных в формате Core Data). Откройте приложение, измените порядок сортировки документа. Это загрязняет документ? Будет ли это изменение стоить регистрации? Будет ли изменение ценным для других пользователей этого репозитория?

Как правило, порядок сортировки не является достаточно ценным, чтобы гарантировать хранение на основе документов (ala NSTableView's Auto Save Name в Interface Builder). Но ваше приложение может поместить приоритет при сортировке (это звучит так).

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

+0

Это приложение для iPhone, которое в моем случае относится к сценарию на основе библиотеки. Мне нравится ментальная модель рассмотрения гипотетического многоуровневого приложения, хотя, и будет ли изменение сделать приложение грязным. В моем случае это было бы, так как выбор под-списка изменяет представление более высокого списка (в частности, подвыбор изменяет то, какое изображение отображается рядом с элементом в более высоком представлении). Что касается сортировки, я имел в виду, что порядок сортировки определяется пользователем. То есть, они могут произвольно упорядочить список (например, создать плейлист в iTunes). – orque

+0

Основываясь на «загрязняет ли он документ», я также хотел бы добавить «изменится ли результат на результат в дополнение к стеку отмены». Undo работает как для приложений на основе документов, так и для библиотек, поэтому кажется, что это хорошая эвристика. – orque

2

Я согласен с rentzsch, но другой способ его просмотра:

Является ли выбор часть данных или его метаданных? Если метаданные, это метаданные об одном документе или это состояние, которое должно применяться к любому документу, который затем открывается?

Метаданные, специфичные для документа, могут быть сохранены как расширенный атрибут. Например, TextMate хранит выбор для документа таким образом, как BBEdit, MPW и другие, используемые для хранения настроек вкладок, размера окна и т. Д. В качестве ресурса в вилке ресурса. Метаданные считаются необязательными, и документ не поврежден, если он удаляется.

Если выбор является неотъемлемой частью данных, то, во всяком случае, хранить его в данных, используя основные данные, если вы случайно качаете этот путь.

И если это не приложение на основе документов, то NSUserDefaults - это самый простой путь, так как поддержка для него обычно встроена в общие подклассы NSView посредством привязок.

+0

Согласен. Я забыл указать, что такое моя существующая модель, поэтому я исправил свой вопрос (я считаю, что это «правильная вещь» здесь) Мне было трудно решить, является ли эта информация «неотъемлемой частью данных» ». С моделью Rentzsch (я бы показал грязную точку) это стало проще, – orque

2

У меня лично нет жесткой линии между сохранением предпочтений в самом файле или в NSUSerDefaults.

Но я всегда тяготел к очевидному:

  • предпочтение Применения = NSUserDefaults
  • предпочтение документов = в самом

Для состояния выбора специально файла, я бы судить, если держать что достаточно важен для пользователя. Если это так и важно для перемещения с документом на другой компьютер, я бы сохранил его в самом документе.

Если это не важно (или применимо), я не стал бы вообще его экономить.

+0

Я думаю, что это меня отключило, потому что на iPhone я не обязательно рассматриваю любые приложения как имеющие «документы»; это всего лишь данные. Сохранение состояния становится гораздо более важным, поскольку применение приложений означает прекращение работы и перезапуск. – orque

+0

Я думаю, что даже в приложении для iPhone - если состояние раздела в текущем местоположении пользователей важно для данных, я бы его сохранил, а если нет, я бы не стал беспокоиться. Похоже, это может быть, поэтому я бы сохранил его с данными. – Lucien

 Смежные вопросы

  • Нет связанных вопросов^_^