UIActionSheet Delegateを使用する正しい方法は?同一のメモリにマップされたポインター
質問
actionSheet:didDismissWithButtonIndex:によって渡されたactionSheet変数を使用して、呼び出しているactionSheetをクラス内のUIActionSheet変数のリストと比較しています。これは、イベントを区別するためにデリゲートメソッドが設計された方法のようです。
- (void)actionSheet:(UIActionSheet *)actionSheet didDismissWithButtonIndex:(NSInteger)buttonIndex {
if (actionSheet == actionSheet1) {
switch (buttonIndex) {
case 0:
// Do Something
break;
case 1:
// Do Something Else
break;
case 2:
// Cancel
break;
}
}
if (actionSheet == actionSheet2) {
switch (buttonIndex) {
case 0:
// Do Something
break;
case 1:
// Do Something Else
break;
case 2:
// Cancel
break;
}
}
}
UIActionSheetが表示されるたびに、UIActionSheetのインスタンスをクラス変数の1つに割り当て、表示プロパティを設定、表示、および解放します。
これは最初はスムーズに機能します。問題は、しばらく実行した後、最終的に両方のUIActionSheetポインター(上記のコード例のクラス変数actionSheet1& actionSheet2)が同じメモリを指すようになり、実行時に何が起こるかによって、両方のifステートメントが発生することですtrueを評価するデリゲートメソッド。良くない。
今、各UIActionSheetを実行ごとに1回だけ割り当て、メモリを保持する場合(リリースを呼び出さないでください)、これは発生しません。しかし、私はここで保守的になろうとしています。 Appleはデリゲートをこのように使用するつもりですか?
解決
UIActionSheetを作成するときに、タグを付けます:
actionSheet.tag = 1; // or 2 or 3 or ...
次に、デリゲートメソッドで、タグに基づいて切り替え、その特定のシートの動作を決定します。
所属していません StackOverflow