【问题】
在iOS程序中,调用NSDateFormatter的stringFromDate,传入的参数也是正确的NSDate*,但是结果得到的值,始终是空值/nil。
代码如下:
1 2 3 4 | -(IBAction)dateChangedAction:(id)sender{ NSDate* selectedDate = self.datePicker.date; self.dateInput.text = [self.dateFormatter stringFromDate:selectedDate]; } |
【解决过程】
1.对于程序的代码,反复确认了,保证对于stringFromDate的使用上,没有什么问题。
2.网上搜索相关内容,找到了:
Objective -C Date Formatter Examples – stringFromDate
然后才注意到,原来人家使用stringFromDate之前,都是有对应的NSDateFormatter的alloc和init的。
而自己这里好像没有。。。
所以就去添加进去。
3.而添加的位置,要找个合适的位置才好。
然后就去参考了之前就参考的代码DateCell,看到了人家是在viewDidLoad就去添加了相关代码的初始化的,包括上述的dateFormatter。
然后自己也就去对应的位置,添加了相关初始化代码:
1 2 3 4 5 6 7 8 9 10 11 | - ( void )viewDidLoad { [super viewDidLoad]; birdNameList = [[NSArray alloc] initWithObjects:@ "Ostrich" , @ "Penguin" , @ "HummingBird" , @ "Peacock" , @ "Sparrow" , nil]; self.birdNamePickerView.delegate = self; [self.birdNamePickerView selectRow:1 inComponent:0 animated:YES]; [self.birdNamePickerView reloadAllComponents]; self.dateFormatter = [[NSDateFormatter alloc] init]; } |
然后运行了下,结果竟然还是空的字符串,而不是所期望的格式化的日期字符串。
4.然后再继续调试,最后发现,原来人家DateCell中,另外还初始化了:
1 2 | [self.dateFormatter setDateStyle:NSDateFormatterShortStyle]; [self.dateFormatter setTimeStyle:NSDateFormatterNoStyle]; |
这样后期所用到的dateFormatter才能正常使用的。
所以就又去添加了同样的代码,变为:
1 2 3 | self.dateFormatter = [[NSDateFormatter alloc] init]; [self.dateFormatter setDateStyle:NSDateFormatterShortStyle]; [self.dateFormatter setTimeStyle:NSDateFormatterNoStyle]; |
然后再去测试,最后终于可以正常工作了,从NSDateFormatter的stringFromDate中所获得值,就是所期望的日期了:
【总结】
对于任何变量,都需要有初始化,并且很多对象类型的变量,需要做一些初始值的设定,然后一些基本的函数,才可以使用的。
以后要记住这些教训。
转载请注明:在路上 » 【已解决】iOS中,从NSDateFormatter的stringFromDate中获得的值,始终是空字符串/nil