我对 iOS 开发相当陌生,并且有一个快速的问题。我一直在使用UITableView's
一些示例应用程序开发进行练习,并注意到数据源往往是某种集合,例如NSArray
. 看来这背后的原因是您可以将当前的索引映射UITableViewCell
到数据源中的正确索引。
所以现在我终于开始着手我开始学习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
什么?您将如何将日历的日期设置为数据源,无论特定日期有多少事件,或者无论使用的日历如何?
谢谢你的帮助!