2012-05-23 2 views
2

Я пишу приложение погоды, которое узнает, что вы носите, основываясь на текущих условиях/температурах, чтобы рассказать вам, что вы должны носить снаружи. Я собираю некоторые простые данные и сохраняю их на устройстве. Я собираю:Какой способ хранения данных для простого приложения iOS?

  • Дата/время
  • Температура Погода
  • Погодные условия
  • 6 ИНТ поля:
    • Глава
    • Грудь
    • Руки
    • Ноги
    • F EET
    • Аксессуар

Я запрашивать данные на основе текущей температуры/состояния, чтобы получить среднее значение в 6 ИНТ полей, чтобы предсказать, что обычно носит пользователь.

Я держу это только на iPhone. Какой был бы хороший, клиентский метод хранения данных для этого? Запросы не слишком интенсивны, но мне нужно запрашивать тип и диапазон.

Я раньше не использовал Core Data. Очень знакомы с MySQL, но не коснулись SQLite. Опять же, я хотел бы сохранить эту клиентскую сторону и не использовать базу данных для простоты/скорости. Я нацелен на приложение get-in/get-out.

+1

NSUserDefaults (через .plist файл), возможно? Похоже на несколько довольно простых элементов данных, поэтому IMHO Core Data или аналогичные могут быть излишними. – Luke

+0

Я не рассматривал .plist, который, возможно, стоит изучить. Я полагал, что это будет чрезмерным, изучая Core Data для такой простой задачи. Хотя, мне нужно было бы загрузить весь .plist, возможно, только для нескольких точек данных ... Однако я хочу избежать NSUserDefaults, потому что, на мой взгляд, хранение вещей, помимо * пользовательских настроек по умолчанию *, является плохим дизайном. – rnystrom

+2

NSKeyedArchiver может хранить произвольный граф объектов в файле. Это очень удобно, но вы должны сами писать все запросы (поиск по массивам, сопоставление ключей и т. Д.). Укусите пулю и изучите основные данные, вы все равно завершите это. – Rayfleck

ответ

2

Я бы рекомендовал использовать Core Data или SQLite. Ваше право, это не так много данных, которые хранятся. Что делать, если это приложение является успешным, и вы хотите расширить свою концепцию?

Например:

(1) Вы хотите хранить больше данных

(2) Может синхронизировать данные на сервер

(3) Изменение типа данных вашего хранения

Вы даже упоминаете QUERY в своем вопросе, для меня это ваш ответ прямо там. Все это будет намного проще с Core Data. Будет кривая обучения, но изучение этой структуры будет полезно для будущих проектов.

Удачи вам в вашем проекте.

+0

Мне нужно сделать несколько учебников Рэя Вендерлиха и посмотреть, как я прав. Если это слишком сложно, я могу просто пойти с SQLite, как предположил Филипп. edit: Также я начинаю свою карьеру в фирменных приложениях для написания, поэтому я мог бы также использовать Core Data. Благодаря! – rnystrom

1

Предыдущий плакат рекомендует Core Data over SQLite. Хотя они правы, чтобы предложить одну из этих двух альтернатив, если вы уже знакомы с MySQL и ищете приложение get-in/get-out, я бы порекомендовал вам пойти с SQLite.

Основные данные - отличная инфраструктура, но есть кривая обучения, которая может оказаться нецелесообразной с учетом ваших спецификаций и вашего предыдущего опыта. SQLite простой, быстрый и клиентский. Более того, ваши запросы не будут отличаться от MySQL.

Другие плакаты упоминают сериализацию над NSUserDefaults или NSKeyedArchiver. Хотя они делают сериализацию простой, вы в конечном итоге сворачиваете свой собственный код запроса с помощью NSPredicate.Это не так сложно, но опять же, это может быть новая технология, которая, хотя и стоит, лучше сохраняется в другое время. Больше беспокоит то, что они не будут хорошо масштабироваться, если ваше приложение начнет быстро использовать множество данных.

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

+0

Скажите, что это расширяет, как SQLite делает до синхронизации с серверной базой данных? Будет ли я использовать базу данных, написанную в MySQL, и в основном передавать данные? Или я могу иметь базу данных на сервере в SQLite? – rnystrom

+0

Я думаю, что на стороне сервера чаще встречается MySQL или PostgreSQL, а не SQLite. В любом случае, даже если вы использовали Core Data или какой-либо другой формат, вам придется сериализовать данные, например, JSON, XML или кучу переменных POST, и отправить их на ваш сервер для хранения. То же самое с получением информации об этом. То есть вы, вероятно, не просто взорвали бы весь ваш магазин SQLite на сервере. Отправка бит данных назад и вперед довольно прямолинейна. Превосходный комплект AFNetworking и JSON может обрабатывать всевозможные методы HTTP и обрабатывать собственные объекты Cocoa, такие как NSDictionary. – Philip

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