2011-12-29 74 views
0

当我的tableview加载它从基于当前我们所在的星期从MySQL数据库抓取数据。这一切工作正常,但我也希望用户能够点击一个UIButton加载下周的数据。之后,按钮停留在那里,可以一遍又一遍地点击以进入下一个星期。按下按钮时,如何使用nscalendar&nsdate进入下一周?

NSDate *date = [NSDate date]; 
    NSCalendar *cal =[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar]; 

    [cal setFirstWeekday:3]; // 


    NSDate *beginningOfWeek = nil; 
    [cal rangeOfUnit:NSWeekCalendarUnit startDate:&beginningOfWeek interval:nil forDate:date]; 
    NSDateComponents *beginComponents = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit) fromDate:beginningOfWeek]; 

    NSDateComponents *offset = [[NSDateComponents alloc]init]; 
    [offset setDay:6]; 
    [offset setHour:23]; 
    NSDate *endOfWeek = [cal dateByAddingComponents:offset toDate:beginningOfWeek options:0]; 
    NSDateComponents *endComponents = [cal components:(NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit) fromDate:endOfWeek]; 

    NSTimeInterval tiStart = [beginningOfWeek timeIntervalSince1970]; 
    NSTimeInterval tiEnd = [endOfWeek timeIntervalSince1970]; 
    NSString *startWeekString = [NSString stringWithFormat:@"%f", tiStart]; 
    NSString *endWeekString = [NSString stringWithFormat:@"%f", tiEnd]; 


    NSURL *url = [NSURL URLWithString:@"http://localhost/test.php"]; 
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
    [request setPostValue:startWeekString forKey:@"startweek"]; 
    [request setPostValue:endWeekString forKey:@"endweek"]; 
    [request setDelegate:self]; 
    [request startAsynchronous]; 

} 

-(IBAction)nextWeek:(id)sender { 

} 

什么是最好的方式去做这件事?

回答

0

我会将所有日历和日期组件代码重构为一个方法,该方法需要NSDate(开始日期)和startWeekString和endWeekString作为参数,并填充后两个值。 在变量中跟踪当前周(或当前使用的开始日期),并在nextWeek中将该变量增加一周,然后将其传递给日历方法。