Это приложение, которое я создавал, запускается на iPad, и я тестировал его на iOS8.1 с помощью XCode 6.1.1. У меня возникла проблема, когда я пытаюсь извлечь записи, сравнивая дату записи в миллисекундах. Записи хранятся с использованием CoreData.iOS Predicate for CoreData с длинными длинными значениями не был достаточно точным
firstDate рекорда объявляется следующим
record.firstDate = [NSNumber numberWithLongLong:1423288915464];
firstDate объявлен в .h файле записи таким образом:
@property (nonatomic, retain) NSNumber * firstDate;
предикат объявлен следующим образом:
NSNumber* prevStartMillis = [NSNumber numberWithLongLong:1423324800000];
NSNumber* prevEndMillis = [NSNumber numberWithLongLong:1423411199000];
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"firstDate >= %lld AND firstDate < %lld", [prevStartMillis longLongValue], prevEndMillis longLongValue]];
Я получил некоторые записи с firstDate, которые входят в спецификацию . Тем не менее, я получаю несколько записей, которые не попадают в указанный диапазон, как эти 3 из многих:
...
FirstDate:1423288915464
FirstDate:1423282909663
FirstDate:1423286413320
...
Раньше у меня была аналогичная проблема, на другое приложение для iPhone 6 iOS8.1 с помощью XCode 6.1.1, как Что ж. Я смог решить это, объявив предикаты с% lld для длинных значений. Однако, когда я использую тот же код, он не работает на iPad. Кто-нибудь знает, что я сделал неправильно? Заранее спасибо!
EDIT 1: Обход
У меня есть обходной путь (хотя и не очень эффективно). Вот фрагмент кода, после того, как я извлечь записи, если кто-то интересно:
NSMutableArray* validRecords = [[NSMutableArray alloc] init];
for(Record* record in results) {
if([record.firstDate longLongValue] >= [prevStartMillis longLongValue] && [record.firstDate longLongValue] <= [prevEndMillis longLongValue])
[validRecords addObject:record];
}
Спасибо, он работает, но он все еще не решает проблему, которую я испытываю. – javaNoob
Я отредактировал свой ответ, еще раз проверьте его –
Привет, я проверял, как это работает для моего дела! Однако это не работает, если указанный предикат работает до миллисекунд, например. между 1423324800004 и 1423324800006. Независимо от того, я не думаю, что буду проверять записи до такой точности, поэтому я собираюсь отметить ваш как правильный ответ! – javaNoob