クラスメソッドにしてみる(アラートダイアログ)

このまえ、クラスを使ってアラートダイアログ出したと思うんだけど、
インスタントのメソッドでアラートを出していたので

AlertClass *myClass = [[AlertClass alloc]init];

という感じでインスタンスをわざわざ作らないとメソッドを実行できなかった。
よく調べてみると
クラスメソッドでアラートダイアログを出せばインスタンスが必要ないということがわかった。
というわけで前回のクラスのコードを流用してメソッドだけをクラスメソッドに変更。
変更は簡単。宣言部と実装部の
– (void)Alert:(NSString *)AlertMsg;
の「ー」マイナスを「+」にすればいいだけ。
+ (void)Alert:(NSString *)AlertMsg;
こんな感じ。。


 

《AppDelegate.h》

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject
	@property (assign) IBOutlet NSWindow *window;
	@property (assign) IBOutlet NSTextField *TextField;
	- (IBAction)PushButton:(id)sender;
@end

 

《AppDelegate.m》

#import “AlertClass.h”
#import “AppDelegate.h”

@implementation AppDelegate
@synthesize TextField = _TextField;

@synthesize window = _window;

– (IBAction)PushButton:(id)sender {

[myClass Alert:self.TextField.stringValue];
}
@end


《AlertClass.h》

#import <Foundation/Foundation.h>

@interface AlertClass : NSObject
- (IBAction)PushButton:(id)sender;
- (void)Alert:(NSString *)AlertMsg;
@end

 

《AlertClass.m》

#import “AlertClass.h”

@implementation AlertClass
– (void)Alert:(NSString *)AlertMsg
{
NSAlert *AlertDialog =[NSAlert
alertWithMessageText:@”アラート!!”
defaultButton:@”OK”
alternateButton:0
otherButton:0
informativeTextWithFormat:AlertMsg
];

[AlertDialog runModal];
}

@end


 

わかった!わかった!クラスがわかった!(Objective-C Class)

みなさまこんにちは

Objective-Cでのクラスの理解がなかなかできないまま、ぐだぐだ勉強してたけどやっとわかってきた。
とゆーわけで前にアラートダイアログを出す実験をしたんだけども、今回はアラートを出す部分をクラス化してみてみた。(じつはあんまり意味無し)
プログラム本体(AppDelegateクラス)からアラートしたい文字列をアラートクラスに送信して表示させる的なものです。
ウィンドウのテキストフィールドに打ち込んだ文字をボタンをクリックすることによってテキストフィールドに打った文字がアラートメッセージとして表示されるようにしたいです。

クラスを作るときは基本的には
クラス名.h(宣言部)
クラス名.m(実装部)
の2種類のファイルが必要でXcodeからクラスファイルを新規作成した場合だいたいセットで作られます。
今回はアラートクラスにアラートを表示する部分をメソッド化します。
メソッドは、、、、とりあえずは命令だと思ってください。(ちょっと違うけどJavaScriptでは関数てきなーーー)
なのでAppDelegateからアラートクラスのメソッドAlertを実行する感じです。
えと、、、勉強しながらなので表現がおかしい場合もあるとおもいますが、、ご了承ください。(確実にまちがっていそう。。)

まずはウィンドウにプッシュボタンとテキストフィールドを配置

ひもづけるとAppDelegate.hはこうなります。
《AppDelegate.h》

#import <Cocoa/Cocoa.h>

@interface AppDelegate : NSObject
	@property (assign) IBOutlet NSWindow *window;
	@property (assign) IBOutlet NSTextField *TextField;
	- (IBAction)PushButton:(id)sender;
@end

AppDelegate.hはこれ以上なにもしないでオッケー。

そしてアラートクラスをXcodeの新規作成から作りましょう。
ここでは名前はAlertClassにしています。
まずは宣言部

@interfaceと@endの間にメソッドの宣言をしましょう。
宣言の文法は
– (メソッドの戻り値の型)メソッド名:(引数の型)引数の名前;
なので
今回は戻り値はいらないので、戻り値がいらない場合はメソッドの戻り値の型はvoidにしておきます。
引数はメッセージの内容をメソッドに渡したいため、文字列型(NSString *)にして名前をAlertMsgにしておきます。

– (void)Alert:(NSString *)AlertMsg;

この一行を@interfaceと@endの間(インターフェイス部)に挿入すると次のようになります。


 

《AlertClass.h》

#import <Foundation/Foundation.h>

@interface AlertClass : NSObject
	- (IBAction)PushButton:(id)sender;- (void)Alert:(NSString *)AlertMsg;
@end

 

つぎは実装部
こちらは@implementation〜@endの間に
メソッドの実行内容を挿入します。
先ほどの宣言部と同じ書式の下の{ }内に実行内容を書きます。

– (void)Alert:(NSString *)AlertMsg;
{
//ここにメソッドの実行内容を入れる
}

アラートダイアログは前に紹介したものとほぼ同じなので説明はしないっす。
一行だけ注目してほしい文が
informativeTextWithFormat:AlertMsg
部分で、引数として渡されたメッセージ(AlertMsg)をここでアラートダイアログにわたしています。


 

《AlertClass.m》

#import “AlertClass.h”

@implementation AlertClass
– (void)Alert:(NSString *)AlertMsg
{
NSAlert *AlertDialog =[NSAlert
alertWithMessageText:@”アラート!!”
defaultButton:@”OK”
alternateButton:0
otherButton:0
informativeTextWithFormat:AlertMsg
];

[AlertDialog runModal];
}

@end


 

最後に本体部分の実装部
まずAlertClassを使用するために
#import “AlertClass.h”
の一行をいれてます。これによってAppDelegateにAlertClassが組み込まれ
メソッド、変数などが使用できるようになります。

そしてまずクラスをインスタンス化する。。(これひじょーにわかりにくい。。)
ようはクラスという設計図から実体化する。
実体化しないと能力は使えない!!
魔法生物を作るレシピ(クラス)を元に産み出した(インスタンス化)魔法生物に能力(メソッド)を使わせる。産み出した魔法生物のHP、MPの値はインスタンス変数、、、(おかしくなってきた。。。)
というわけで下の一行を使ってクラスを実体化させないといけないわけ。
AlertClass *myClass = [[AlertClass alloc]init];

ちなみにmyClassってのが実体化したクラスにつける名前(任意)
[[AlertClass alloc]init];
はほぼ決まりごとと思っていいらしいです。
allocはメモリに実体化したクラスを割り当てる。
initが実体化したクラスを初期化する。
という役割みたいです。
最後に実際にアラートクラスを呼び出している命令
メソッド呼び出しの文法は

[クラス名 メソッド名:引数];
引数にはテキストフィールドの文字列「self.TextField.stringValue」を渡したいので
[myClass Alert:self.TextField.stringValue];
というふうになります。


 

《AppDelegate.m》

#import “AlertClass.h”
#import “AppDelegate.h”

@implementation AppDelegate
@synthesize TextField = _TextField;

@synthesize window = _window;

– (IBAction)PushButton:(id)sender {
AlertClass *myClass = [[AlertClass alloc]init];
[myClass Alert:self.TextField.stringValue];
}
@end


 

これをビルドして実行!!

テキストフィールドにアラートダイアログに出したい文章を入力。
ぼたんくりっく!!

おーーーけーーーばっちり

それではまた

Objective-Cでアラートダイアログを出してみる

とりあえずAppleScriptでいうアラートダイアログをObjective-Cでも出してみようということで、

1.ボタンを押すとアラートダイアログが出現。

2.どれかボタンを押すと押した内容がテキストフィールドに出る的なものを作ってみた。

これはバージョンで出来る出来ないあるのかな。。
とりあえず環境は毎度同じなXcode4.2です。

 
職業柄、変数名などはできるだけAppleScriptに近いような表現がいいかな?ということで
そういう名前にしています。
プロパティの設定もJavaScriptに近いほうがわかりやすいかなと、
selfを使った表現にしています。
わかりずらくなってたらごめんなさい。
 

– (IBAction)Button:(id)sender {
NSAlert *AlertDialog =[NSAlert
alertWithMessageText:@”アラートダイアログてすと”
defaultButton:@”OK”
alternateButton:@”Cancel”
otherButton:@”Other”
informativeTextWithFormat:@”どれかボタンをおしてください。”
];

switch([AlertDialog runModal]){
case 1:
self.TextField.stringValue=@”OKだよーー”;
break;

case 0:
self.TextField.stringValue=@”Cancelだよーー”;
break;

case -1:
self.TextField.stringValue=@”Otherだよーー”;
break;
}

}

Objective-Cで利用できるframeworkについて

Objective-Cを勉強するにあたって、
「書きながら覚えよう」
ということでこのブログにかきかきしながら知識を深められたらなってことで、
基本的なライブラリの「Cocoaフレームワーク」で利用できるクラスなどを

ひとつづつ読み解いてこちらにまとめていこっかななんて思っています。
↓↓↓↓↓↓↓↓↓↓↓
Objective-Cで利用できるframework
こりゃ、、先はながいね、、、、。

ASOC(AppleScriptObjC)とTextFieldと私

前回はASOCでボタン用のハンドラ作って
IllustratorのJavaScript動かすのをやってみたけど

今度はWindow上のTextFieldにAppleScriptから文字を出力するようなものをつくってみようとおもう。
まずはいつもどおりMainManu.xibのウィンドウにテキストフィールドとプッシュボタンをObjectLibraryからドラッグして配置

AppDelegate.applescriptの

property parent : class “NSObject”の下あたりに
property TextField : missing value
の1行を追加してプロパティTextFieldを宣言。
missing valueは初期化されていない値(AppleScript)
Objective-Cのnilのかわりらしい。
初期化みたいなものかな。

そして前にやったようにプッシュボタン用のハンドラPushButtonを用意。

on PushButton_(sender)
end PushButton_

そしてApp DelegateのConnections inspector(右クリックでもでる)の
OutletsにTextField
Received ActionsにPushButton
が追加されているはずなので

TextFieldからウィンドウ上のテキストフィールドに
PushButtonからウィンドウ上のプッシュボタンにドラッグすると
接続完了。
接続できるとこんな感じになるとおもう↓

接続ができたらプッシュボタン用のハンドラPushButton内に
下の一行を追加

set stringValue of TextField to “へろーわーるど”
AppleScriptの文法で
TextFieldのstringValueに文字列「へろーわーるど」をセットするっていうことですね。

on PushButton_(sender)
set stringValue of TextField to “へろーわーるど”
end PushButton_

これで完成。

実行!!


無事プッシュボタンをクリックすることでウィンドウ上のテキストフィールドに「へろーわーるど」が表示されました。

たいしたことやってないけど積み重ねだよね。(たぶん
ちょっとずつがんばっていこー。

関係ないけどなぜかWordPlessでのプラグインWP SyntaxHighlighterが使えなくなった。
WordPlessの更新のせいかな、、、