Как создать поле метки времени в sqlite, чтобы объект Core Data с полем NSDate был правильно инициализирован? - PullRequest
1 голос
/ 26 февраля 2011

После прочтения этого замечательного учебника по предварительной сборке базы данных sqlite для использования Core Data я все еще застрял в столбцах datetime. Я опубликовал свой вопрос, чтобы попытаться получить некоторую помощь, потому что я застрял на этом.

Мое приложение использует предварительно созданную базу данных только для чтения, это транзитное приложение, а источником данных являются данные расписания. Даты в следующем формате (от поставщика данных): «20110223» (что будет написано «23 февраля 2011 года»). Я просматривал пост и комментарии, рассказывая о справочной дате iPhone 2001 года, и корректировал значения даты / времени с учетом разницы секунд с того времени до вставки в sqlite. Мой скрипт импорта определяет столбец TIMESTAMP для хранения этой дельты секунд. Примером столбца после сохранения будет «319766400».

Вот фрагмент Ruby в качестве примера того, что делает мой скрипт:

>> delta_seconds = Time.parse("20110223") - Time.local(2001, 1, 1, 0, 0, 0)
=> 320112000.0
>> Time.at(delta_seconds)
=> Fri Feb 22 19:00:00 -0500 1980

Обратите внимание, что запрос времени от delta_seconds (Time.at (delta_seconds)) показывает правильный день года (22 февраля), но в 1980 году, то есть через 10 лет после EPOCH - что кажется правильным. В Базовых данных я определил свой атрибут модели, который сопоставляется с этим полем БД, как «NSDate». Однако, когда я запускаю симулятор и проверяю отладчик, для каждого объекта я запрашиваю поле NSDate (start_date) следующим образом: [object valueForKey: @ "start_date"], которое дает мне "2001-08-21 18:10 : 19 по Гринвичу ". Другими словами, кажется, что он не читает значение дельта-секунд. Если бы это было так, я бы ожидал, что в этом случае будет применяться «10-летняя секунда» и придет дата «2011».

Можете ли вы определить, что я делаю не так? Любые предложения о возможных исправлениях? Спасибо! (Основные данные iOS 4.1)

Или : может ли кто-нибудь опубликовать значение из своей базы данных sqlite, которое считывает Базовые данные, из столбца, который должен быть источником поля NSDate? Пример значения из моей базы данных: 320371200, который, кажется, не работает.

1 Ответ

4 голосов
/ 26 февраля 2011

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

Хотя преобразование схемы существующей базы данных SQL в схему, используемую в Core Data, кажется самым простым решением, но на самом деле это довольно сложное и хрупкое решение.

Лучшая идея - написать небольшое служебное приложение, используя модель данных и любые классы из вашего основного приложения.Затем импортируйте существующий SQL и создайте объекты Core Data и график из этих данных.Затем возьмите БД из приложения-утилиты и вставьте приложение-релиз.

Это не займет больше времени, ваша схема актуальна и может быть обновлена ​​без беспокойства.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...