Запросы дат в NSPredicate не кажутся правильными: не в состоянии соответствовать будущим датам - PullRequest
0 голосов
/ 21 июня 2010

У меня есть некоторые данные XML, извлеченные из веб-службы, которые я использую для создания NSManagedObject s и сохранения в хранилище sqlite3.В моем приложении я использую NSPredicate объекты для запроса этих данных по дате (наряду с другими полями).У меня есть данные за каждый день с апреля 2009 г. по август 2010 г. (в соответствии с необработанным XML-кодом, полученным из веб-службы SOAP).

Вот небольшая настройка:

NSCalendar *cal = [NSCalendar currentCalendar];

NSDate *today = [cal dateFromComponents:[cal components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit
                                               fromDate:[NSDate date]]];
NSDate *day1ahead = [cal dateFromComponents:[cal components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit
                                                   fromDate:[NSDate dateWithTimeIntervalSinceNow:kSecondsPerDay]]];
NSDate *day2ahead = [cal dateFromComponents:[cal components:NSDayCalendarUnit|NSMonthCalendarUnit|NSYearCalendarUnit
                                                   fromDate:[NSDate dateWithTimeIntervalSinceNOw:kSecondsPerDay*2]]];

Я могу успешно получить NSManagedObject s, используя запрос NSPredicate, подобный следующему:

NSPredicate *todaysData = [NSPredicate predicateWithFormat:@"(StartDate >= %@) AND (StartDate <= %@)", today, day1ahead];

Однако, когда я делаю запрос, подобный следующему, я получаю bupkis.

NSPredicate *tomorrowsData = [NSPredicate predicateWithFormat:@"(StartDate >= %@) AND (StartDate <= %@)", day1ahead, day2ahead];

Я проверил данные XML, и есть будущие даты, для которых я пытаюсь сделать запрос, и я также проверил хранилище данных sqlite3 напрямую следующим образом:

sqlite> select datetime(startdate, "unixepoch", "31 years") from mydatatable;

Результаты этого простого запросапокажите, что будущие даты, которые мне нужны, уже есть.

Я даже попробовал запрос, подобный этому:

NSPredicate *allFuture = [NSPredicate predicateWithFormat:@"(StartDate >= %@)", today];

Результаты не включали ничего, кроме текущего дня.Похоже, что он находится в резервном хранилище, поэтому я немного растерялся из-за того, что объекты NSPredicate не работают так, как я ожидаю.

Есть ли способ увидеть фактические операторы SQL, сгенерированные CoreData, чтобы я действительно мог видеть, что происходит?Я смотрю на данные неправильно в БД sqlite3?Что-то еще очевидно, что я скучаю?

1 Ответ

1 голос
/ 21 июня 2010

Есть ли способ увидеть фактические операторы SQL, сгенерированные CoreData, чтобы я мог действительно видеть, что происходит?В ваших настройках Active Executable в XCode добавьте -com.apple.CoreData.SQLDebug 1 в список «Аргументы, которые нужно передать при запуске» и отметьте галочкой.Базовые данные будут тогда NSLog свои запросы SQL.

...