UIActionSheet Delegateを使用する正しい方法は?同一のメモリにマップされたポインター

StackOverflow https://stackoverflow.com/questions/606733

質問

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 ...

次に、デリゲートメソッドで、タグに基づいて切り替え、その特定のシートの動作を決定します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top