2011年11月28日月曜日

UIAlertViewとUIActionSheet利用上の注意

UIAlertViewとUIActionSheetは、常にallocとinitを同時に行う必要がある。
すなわち、そのクラスインスタンスを使い回す場合でも、allocだけ先に行い、実利用時にinitだけ行って再利用すると言うことが出来ない。

文法上は問題ないのだが、実実行時、2回目以降に表示が異常になる。

 ~~だめな書き方~~
// 初期化時
UIAlertView *alertView=[UIAlertView alloc];



// 利用場所
[alertView initWithTitle:~];


~~正常動作する書き方~~


// 初期化時

UIAlertView *alertView;
alertView=nil;

// 利用場所
if (alertView!=nil) [alertView release];

alertView=[[UIAlertView alloc]initWithTitle:~];


ちなみに、ActionSheetでは(複数の)選択項目とCancelを設定出来、iPhoneではCancelボタンが表示されるが、iPadでは表示されない。アクションシート外をタップするとキャンセル相当という操作のようである。「Cancelが表示されない!」と悩まないように(実は自分)。


UIKitでは、Objective-Cの理論上記述可能なはずなのに、実際には呼び出し順序に制約がある組み合わせが他にもあるので、実行時に異常が発生する場合は、そのあたりも要注意である。

0 件のコメント:

コメントを投稿