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 件のコメント:
コメントを投稿