2012-03-15 11 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

これは、NSDateではなくUIDatePickerとしてキャストする必要があります。また、渡されたオブジェクトをInterface Builderで型IDからネイティブ型に変更するのは簡単です。これにより、インターフェイスファイルと実装ファイルの両方で接続が適切に行われます。私は、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); 
} 
関連する問題