質問: ボタンが押されるとカスタムダイアログを表示するといったプログラムを組んでいるのですが、 ルートの`ViewController`に`Main.Storyboard`にあるダイアログ用の`ViewController`を表示させるにはどうすればよろしいでしょうか?色々と調べていても実装例が少なく、下記のサイトを参考にしているのですがうまくいきません。(特に`objc_setAssociatedObject`というところで躓いてしまってます。。。) どなたかカスタムダイアログの表示のさせ方が分かる方がいればご教授いただきたいです。 すみませんが、よろしくお願いします。
回答: つまづいているところの説明 ``` objc_setAssociatedObject ``` > > // ウィンドウのオーナーとしてアプリ自身に括りつけとく > > objc_setAssociatedObject([UIApplication sharedApplication], &kAssocKey_Window, window, OBJC_ASSOCIATION_RETAIN_NONATOMIC); > > > 上記の意味はシングルトンのインスタンス`[UIApplication sharedApplication]`に`&kAssocKey_Window`というキー名で`window`というオブジェクトデータを`nonatomic,retain`の属性で保持する。という内容です。 `window`を取り出したい時には下記のようにします。(取り出したwinは多分UIWindowクラス型) ``` id win = objc_getAssociatedObject([UIApplication sharedApplication],&kAssocKey_Window); ``` 上記は特殊なデータ保持の方法で、通常であれば各クラスで定義したプロパティに保持するようなデータをインスタンスに対して直接保持させることができます。 この機能を使えば標準のフレームワーク内の各クラス(UIApplication,NSStringなどなんでも良い)の**インスタンス**に直接**オブジェクトデータを保持できます**。 利用シーンとして、カテゴリなどでは通常はインスタンス変数を追加できないですが、この機能を使えば擬似的にプロパティを追加することができます。 下記をインポートすると使えます。 ``` objc/runtime.h ```