2011-10-25 7 views
3

iOS 5.0を実行しているiPhone 4SとiOS 4.3を実行しているiPadで、同じコードの異なる動作を分類しようとすると、困惑します。UIDatePickerコードを実行しているiOS 4.3と5.0の動作が異なる

ビューコントローラコードは、生年月日を入力する日付ピッカーを持つビューに関連付けられています。インタフェースビルダーを介して日付ピッカーが受信アクションに関連付けられているビューコントローラ方法に向けられ、「変更された値」 - (IBAction)生年月日:(ID)、送信者:このコードは、そのアプリケーションにおいて非常に重要である

ビューが読み込まれたときには実行されません。私は、ビューがiOS 5.0で読み込まれたときにこのコードが実行されないようにブレークポイントを挿入してデモンストレーションしましたが、iOS 4.3でビューが読み込まれてプログラムに実際の問題が発生したときに実行されます(デフォルトの生年月日は入力された生年月日として解釈されます) 。ユーザーがデフォルトの生年月日を変更しない限り、IBActionコードがiOS 4.3で実行されないようにする方法についてアドバイスをいただければ幸いです。私はこの行動の違いがなぜ存在すべきかについても非常に興味があります。前もって感謝します。

答えて

3

これは、iOS 4.3でそれを回避する1つの方法は、最後にloadViewの最初にYESに設定し、NOれるBOOLを持っているだろうのiOS 5.0でUIPickerViewの行動に文書の変更(Release Notes) です。

値変更方法birthDate:は、変更を処理する前にこのBOOL値がNOであることを確認できます。

-(void)loadView 
{ 
    isViewLoading = YES; // isViewLoading is a BOOL ivar 
    // load view 
} 
-(void)viewDidLoad 
{ 
    // what ever else 
    isViewLoading = NO; 
} 
-(IBAction)birthDate:(id)sender 
{ 
    if (isViewLoading) return; 
    // handle change 
} 
+0

ありがとうコードです。残念ながら、iOS 4.3でも同じ問題が発生します。このコードとシーケンシャルブレークポイントを配置すると、ビューがロードされるときの実行順序はloadView、次にviewDidLoad、メソッドbirthDate(その時点でブール値はNO)です。私が試すことができる追加の提案? – user183804

+0

try - (void)viewDidAppear:(BOOL)animated {[super viewDidAppear:animated]; } – mackross

+0

優秀! viewDidLoad、次にbirthDate、次にviewDidAppearの実行シーケンスは、iOS 4.1,4.2,4.3、および5.0を実行しているブール・スキームで完全に動作します。大きな助けをいただきありがとうございます。 – user183804

関連する問題