Я работаю с Realm, и у меня есть массив, отсортированный по датам для всех записей конкретной карты. Мне нужно создать NSPredicate (или каким-то другим способом), который даст мне все даты для этой карты по порядку для определенного месяца. Моя проблема в том, что в некоторых месяцах разное количество дней.
Вот что у меня есть до сих пор.
// Filter specific card, create date and string for x axis
NSString *filteredName = [NSString stringWithFormat:@"%@", self.cardType];
NSDate *dateElement = [[NSDate alloc]init];
NSString *datedString = [[NSString alloc]initWithFormat:@""];
//Formatting datedString
NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.dateFormat = @"MM/dd/YYYY";
NSSortDescriptor *dateSort = [[NSSortDescriptor alloc]initWithKey:@"date" ascending:YES];
NSArray *sortedArray = @[dateSort];
//self.orderHistory is all of the cards from the Realm database filtered down to a specific type of card.
for (Order *uniqueOrder in [self.orderHistory objectsWhere:@"name = [c] %@", filteredName]) {
// [self.uniqueCardArray addObject:uniqueOrder];
dateElement = uniqueOrder.date;
datedString = [df stringFromDate:dateElement];
[self.uniqueDatesForCardArray addObject:datedString];
}
[self.uniqueCardArray sortUsingDescriptor:sortedArray];
Код выше дает мне все даты для конкретной карты. Мне нужны даты для данного месяца, поэтому я попробовал это безвкусное решение, но я думаю, что есть что-то более элегантное, если не сказать больше.
NSDate *todaysDate = [NSDate date];
NSTimeInterval secondsInMonth =- (60 * 60 * 24 * 365) / 12;
NSDate *dateOneMonthBack = [todaysDate dateByAddingTimeInterval:secondsInMonth];
NSPredicate *backDatesPred = [NSPredicate predicateWithFormat: @"date BETWEEN {%@, %@}", dateOneMonthBack, todaysDate];
Помимо того, что это неприятный код, он также вернет меня на месяц назад с текущей даты, а не только на начало месяца. Я просматривал документацию Realm, материал NSCalendar и руководство NSPredicate, и теперь моя голова плавает, пытаясь сосчитать все возможные проблемы, которые могут пойти не так, как надо. Любые советы или фрагменты кода будут очень полезны.