スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

cocoa Notification

今日は、Macのプログラミングの話。
cocoaというフレームワークは、objective-cという他の言語とは一線を画した開発言語となっている。
今まで、basic、cobol、c、pascal、perl、javaなど、いろんな言語に携わってきたが、objective-cはかなり曲者。
MVCをかたくなまでに厳守しようとするため、Ojbect(直方体)の配置やモデルとのリンクなど、馴染みのない操作を強いる。

そのなかでも、他のクラスから別のクラスのメソッドを実行するとか、1つのウインドウにあるボタンを押すと、別のクラス(ウインドウ)の処理が実行される、といった操作は簡単ではない。
つまり、イベントを発生させるのが、とても苦手な言語だ。

複数のクラスでメッセージをやり取りする場合、よく使うのが、グローバル変数とNotificationだ。
Notificationはこっちのクラスでボタンを押したぞ、あとよろしく、と言ったメッセージのやり取りをするもので、
objective-c以外であれば、造作なかったが、こいつは勝手が異なる。

とりあえず、下記にまとめた。

●通知を受ける側
<△△.m>
- (id)init
NSNotificationCenter *nc=[NSNotificationCenter defaultCenter];
[nc addObserver:self selector:@selector(handlesaveON:)
name:SSsaveON object:nil];
//SSsaveONという通知(合言葉)が来たら、
//handlesaveONを実行する。

[nc addObserver:self selector:@selector(handlesaveON:)
name:SSjump object:nil];
//2つめもこんな感じで設定できる

通知を受けたときに実施する処理
-(void) handlesaveON:(NSNotification *)note{
}

●通知する側
<▲▲.h>
extern NSString *const SSsaveON;

<▲▲.m>
NSString *const SSsaveON=@"BNRColorChanged";
//なぜかこの1行が必須

NSNotificationCenter *nc=[NSNotificationCenter defaultCenter];
[nc postNotificationName:SSsaveON object:self];
//あとはよろしく、という合図を「SSsaveON」という合言葉に託した

今日は、少し高度だったかな?
スポンサーサイト
プロフィール

SSWorld

Author:SSWorld
SSWorldへようこそ!
デジタル化されたモノが好きなのかもしれません。プログラミングしてフリーウエアを作ったり、昔録音した自分たちの演奏をデジタル化したりして、楽しんでます。DVDレコーダーも割りと早くに手に入れ、機械を分解してもいます。

最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
カテゴリー
カウンタ

ブロとも申請フォーム

この人とブロともになる

ブログ内検索
RSSフィード
リンク
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。