今回は前回の続きみたいなもんですが、「ヒレガス本第3版」P223第14章のチャレンジ問題に挑戦します。
本書P223には、「NSApplicationは、NSApplicationDidResignActiveNotificationという通知をポストします。」とあります。同じページの14.8にはこのような通知を受けた場合のメソッド名の決まりが載ってます。すなわち、メソッドは次のようになると思われます。また、オブザーバは自動で登録されるとのことで、実装する必要はないと思われます。
-(void)applicationResignActiveNotification(NSNotification *)aNotification {
beep();
}
beep();
}
ところが、このメソッドを”AppController.m”ファイルに実装して、”File's Owner”から”AppController”へのデリゲート接続を確認しても、うんともすんとも言わず上手く動作しません。そんな訳で、デベロッパドキュメントで、”NSApplicationDidResignActiveNotification”を調べてみると、似たような通知に”NSApplicationDidBecomeActiveNotification”つうのがみつかりました。私のつたない英語力でもresign=辞める、become=成る、となると”〜become〜”の方がチャレンジ問題、「アプリケーションがアクティブになった際、ビープ音を鳴らすようにしてください」には適していると思われます。
ということで、以下のメソッドを”AppController.m”ファイルに実装してみたところ、上手く動作するようになりました。
- (void)applicationDidBecomeActive:(NSNotification *)nc {
NSBeep();
}
NSBeep();
}
尚、ビープ音はシステム環境設定で設定したものなので、このままではこのアプリからは変更できません。
それにしても「NSApplicationは、NSApplicationDidResignActiveNotificationという通知をポストします。」の部分は誤植なのか、本当に読者を試しているのかよく判らないですね。「その2」でも本書の記載が怪しいのか、ひっかけなのかわからないという事件に遭遇しましたが、今回も真相は著者と訳者にしかわからないんでしょう。ちなみに、私は原著を確認するほどの強者ではありませんので、あしからず。
1 件のコメント:
実際に「ヒレガス本」の読者には、別に「その6」「その7」を分けなくてもよかったんじゃないの、と思われるかもしれないんですが、この方が当方の頭が整理しやすくて。
これでも5/1夜から5/2夕方にかけて、のべ6時間くらいの成果です。好きなことに時間を使えるGWって素敵やねぇ。やっぱ日本人は仕事のし過ぎやな。
コメントを投稿