Учитывая ваши комментарии к вопросу, я предполагаю, что вы ищете способ связать строки (или любой объект, действительно) с заданными днями. Эта ассоциация поддается NSDictionary
, и даты, очевидно, лучше всего представлены с NSDate
экземплярами. Имея это в виду, я предлагаю другую структуру данных.
Вместо глубоко вложенных массивов следует учитывать следующее, где NSDate
объекты являются ключами словаря, а их соответствующие значения являются NSArray
экземплярами, содержащими строку для этого определенного момента времени, а не только дня. :
NSDictionary {
NSDate: NSString,
NSDate: NSString,
NSDate: ...,
}
Теперь, когда ваши данные хранятся в подходящей структуре, вы хотите иметь возможность запрашивать их для объектов, связанных с данным днем. Для этого у вас может быть следующий метод (ы):
- (BOOL)date:(NSDate *)date isSameDayAsReferenceDate:(NSDate *)reference {
NSCalendar *calendar = [NSCalendar currentCalendar];
NSCalendarUnit units = NSYearCalendarUnit|NSMonthCalendarUnit|NSDayCalendarUnit;
NSDateComponents *compDate = [calendar components:units fromDate:date];
NSDateComponents *compReference = [calendar components:units fromDate:reference];
return [compDate isEqual:compReference];
}
- (NSArray *)stringsForDay:(NSDate *)day withDictionary:(NSDictionary *)dictionary {
NSSet *dates = [dictionary keysOfEntriesPassingTest:^BOOL(id key, id obj, BOOL *stop) {
return [self date:key isSameDayAsReferenceDate:day];
}];
return [dictionary objectsForKeys:[dates allObjects] notFoundMarker:[NSNull null]];
}
Теперь, если вам нужен массив всех строк на сегодняшний день, вы можете просто вызвать [self stringsForDay:[NSDate date] withDictionary:theDictionary]
и покончить с этим.
Этот подход является более гибким, чем предлагаемая вами альтернатива, предложенная в этом вопросе, поскольку изменение степени детализации на недели, месяцы, годы и т. Д. Теперь очень просто.