2012-03-15 63 views
0

下面的函数(即dateChanged())由UIDatePickersolve触发。我的问题是,如何从NSDate检索字符串?

NSLog(@"Future: %@", futureDate); 

返回'null'。但是,

NSLog(@"Today: %@", today); 

工作得很好。

我知道,铸造发件人为的UIDatePicker,让我解决使用问题:

futureDate = [dateFormat stringFromDate:sender.date]; 

,但我不明白为什么我不能投发件人为一个NSDate。任何有识之士将不胜感激。

//- (IBAction)dateChanged:(UIDatePicker*)sender { 
    - (IBAction)dateChanged:(NSDate *)sender { 
    NSDate* todaysDate = [NSDate date]; 
    NSDateFormatter* dateFormat; 
    dateFormat=[[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"MMMM d, yyyy hh:mm:ssa"]; 
    NSString * today; 
    NSString * futureDate; 
    today=[dateFormat stringFromDate:todaysDate]; 
    NSLog(@"Today: %@", today); 
    futureDate = [dateFormat stringFromDate:sender]; 
    NSLog(@"Future: %@", futureDate); 
    } 

回答

1

确定您可以将发件人转换为NSDate *。或者UIButton * - 或其他任何东西。然而,它并没有改变日期选择器实现发送UIDatePicker *作为委托消息参数的事实,并且该投射将是无效的。最灵活的委托消息将id作为返回参数的一种类型,但传递的对象始终是某个类的对象。而且,对于已铸造类的代码完成和警告,Objective-c铸造仅使您的调试和开发过程更加轻松。

0

这需要作为UIDatePicker而非NSDate进行处理。此外,在Interface Builder中很容易将传入的对象从类型ID更改为本机类型。这会使接口和实现文件中的连接正确。我偶尔会在使用UIButton等对象的自定义子类时执行此操作。

- (IBAction) dateChanged:(UIDatePicker *)sender { 
    NSDate* todaysDate = [NSDate date]; 
    NSDateFormatter* dateFormat; 
    dateFormat=[[NSDateFormatter alloc] init]; 
    [dateFormat setDateFormat:@"MMMM d, yyyy hh:mm:ssa"]; 
    NSString * today; 
    NSString * futureDate; 
    today=[dateFormat stringFromDate:todaysDate]; 
    NSLog(@"Today: %@", today); 
    futureDate = [dateFormat stringFromDate:sender.date]; 
    NSLog(@"Future: %@", futureDate); 
}