下面的函数(即dateChanged())由UIDatePickersolve触发。我的问题是
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);
}
答案 0 :(得分:1)
当然,您可以将发件人转换为NSDate *。或UIButton * - 或其他任何东西。但是,它并没有改变日期选择器实现发送UIDatePicker *作为委托消息的参数并且转换将无效的事实。最灵活的委托消息将id作为返回参数的类型,但传递的对象始终是某个类的对象。而Objective-c强制转换只会使代码完成和演示类的警告更容易进行调试和开发过程。
答案 1 :(得分:0)
这需要作为UIDatePicker而不是NSDate。此外,很容易将传入的对象从类型ID更改为Interface Builder中的本机类型。这使得接口和实现文件中的连接正确。我在使用UIButtons等对象的自定义子类时偶尔会这样做。
- (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);
}