2012-03-15 3 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 только облегчает процесс отладки и dev с завершением кода и предупреждениями для класса casted.

0

Это должно быть выполнено как UIDatePicker, а не NSDate. Кроме того, легко изменить переданный объект с идентификатора типа на собственный тип в 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); 
}