Я довольно новичок в разработке iOS и задал быстрый вопрос. Я использовал UITableView's
в некоторых примерах разработки приложений для практики и заметил, что источник данных имеет тенденцию быть какой-то коллекцией, такой как NSArray
. Похоже, причина в том, что вы можете сопоставить индекс текущего UITableViewCell
с соответствующим индексом в источнике данных.Использование календарных дней в качестве источника данных UITableView в iOS
Итак, теперь я, наконец, приступаю к работе над проектом, который я хотел сделать, когда начал учиться Objective-C
и iOS. Приложение-календарь, в котором перечислены события дней в UITableView
. Мой вопрос в том, что, поскольку я обращаюсь к событиям с объекта EKCalendar
в EKEventStore
и имеет несколько календарей с различными событиями в день, как бы вы установили это с помощью источника данных UITableView's
? Я изначально только что создал NSArray
из NSDates
, который отложен назад на три года с текущего дня и перешел на три года с текущего дня, после чего я мог сопоставить индекс представления таблицы с этим как источник данных. Это не похоже на правильный способ сделать это, потому что, если пользователю нужно продвигаться более трех лет? Я предполагаю, что для этого есть более эффективная усадьба или лучший подход.
- (id)init {
self = [super init];
if (self) {
//Get calendar access from the user.
[self initCalendars];
DateUtility *dateUtility = [[DateUtility alloc] init];
NSMutableArray *dates = [[NSMutableArray alloc] init];
//Build array of NSDates for sharing with the View Controller
//This seems like the incorrect way to do this...
//Backwards three years
for (int date = -(365*3); date < 0; date++) {
[dates addObject:[dateUtility adjustDate:[NSDate date] byNumberOfDays:date]];
}
//Forward three years
for (int date = 0; date < (365*3); date++) {
[dates addObject:[dateUtility adjustDate:[NSDate date] byNumberOfDays:date]];
}
}
return self;
}
- (void)initCalendars {
//respondsToSelector indicates iOS 6 support.
if ([self.eventStore respondsToSelector:@selector(requestAccessToEntityType:completion:)]) {
//Request access to user calendar
[self.eventStore requestAccessToEntityType:EKEntityTypeEvent completion:^(BOOL granted, NSError *error) {
if (granted) {
NSLog(@"iOS 6+ Access to EventStore calendar granted.");
} else {
NSLog(@"Access to EventStore calendar denied.");
}
}];
} else { //iOS 5.x and lower support if Selector is not supported
NSLog(@"iOS 5.x < Access to EventStore calendar granted.");
}
//Store a reference to all of the users calendars on the system.
self.calendars = [self.eventStore calendarsForEntityType:EKEntityTypeEvent];
[self.eventStore reset];
}
Это метод adjustDate, если вы хотите увидеть, что делает весь мой код.
- (NSDate *)adjustDate:(NSDate *)date byNumberOfDays:(NSUInteger)numberOfDays {
NSDateComponents *components = [[NSDateComponents alloc] init];
components.day = numberOfDays;
NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
return [calendar dateByAddingComponents:components toDate:date options:0];
}
Что такое лучший шаблон дизайна использовать для пытаться использовать данные из нескольких EKCalendars
в хранилище событий в качестве источника данных для одного UITableView
? Как настроить даты календаря в качестве источника данных, независимо от количества событий, которые есть в тот или иной день, или независимо от используемого календаря?
Спасибо за помощь!
Пожалуйста, поделитесь примером кода. – Sandy