忍者ブログ

[PR]

2017年10月20日
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

代表クラスのポインタ取得

2009年01月19日
多数のビューをもつプログラムでは設定データの管理は代表クラスで一元管理したほうが解りやすいです。なぜならアプリケーション起動直後にデータの読み込みを行うのも、アプリケーション終了時にデータを保存するのもプロジェクトの〜AppDelegateクラスで行うのが基本的なお作法だからです。そのため代表クラスに設定値変更用の命令を用意しておき、ビュー側でデータを変更したらそれを呼び出して代表クラス側の値を逐次変更してゆきます。では、ビューから代表クラスのポインタを取得するにはどうするかというと、UIApplicationクラスにある命令を使います。

 

Tiny3DAppDelegate *appDelegate = (Tiny3DAppDelegate *)[[UIApplication sharedApplication]delegate];

[appDelegate setEdited];

 
 
これは現在実行中のプログラムの代表クラスを返す命令です。実際の呼び出しは、上のような形で行うことが多いです。なお、キャストを入れないとid型が返るので、コンパイル時に警告が出ます。また、当たり前ですがビューコントローラーのメソッドファイル(.mファイル)の頭の部分に、

#import "Tiny3DAppDelegate.h"

 
といったようにインポートを書き忘れないようにしましょう。なお、id型で受け取ってメッセージを送る書き方もできます。

id appDelegate = [[UIApplication sharedApplication]delegate];

objc_msgSend(appDelegate,@selector(finishDownload));

 
これはダウンロードが終わったときに代表クラスに終了を通知する際、コールバック関数内で使った例です。このメッセージを受け取ったら、代表クラスからビュー側へメッセージを送ってビュー側にも通知し、ダウンロードが終わった旨を画面に表示するようにする。そんなときに利用しました。
PR
Comment
  Vodafone絵文字 i-mode絵文字 Ezweb絵文字
Trackback
トラックバックURL: