2012年12月29日土曜日

003-関数(メソッド, Xcode, Objective-C)

関数を作るのもひと苦労。。

hファイルとmファイルがあって、
どのように書けばいいのか?


引数の渡し方がわからない。。
呼び出し方がわからない。。

う〜ん。

本当にしんどかったので、共有いたします。


hファイルには


-(void) testkansu:()value;

とりあえず、こんな感じで
関数作成完了!!

voidは返し値なしという意味で、
関数名はtestkansu
引数はなしです。

関数名にはセンスがなく、
コーディング規約に違反してそうなんですが、
そこは置いといて、

mmファイルには

処理内容
-(void)testkansu;
{
    //処理実装
    oLabel1.text = @"関数から呼ばれたよ。";
}

呼び出し

[self testkansu:0];


■サンプルで作ってみました



■実行結果


前回作成した、プロジェクトを流用すると、結果はこんな感じです。

この関数に引数を渡すと、
どうなるのでしょう??

hファイルは
-(void) testkansu:(NSString*) sText;


mファイルは

-(void)testkansu:(NSString *) sText

こんな感じで。

呼び出しは
    [self testkansu:(@"引数渡した関数")];



ではでは、第3形態として、引数と返し値があるパターンです。

hファイル
-(NSString*) returnkansu:(NSString*) sText;

今まで、voidだった、場所に
返し値の型を記載するだけですね。
これは簡単!!

mファイル
-(NSString *)returnkansu:(NSString *) sText
{
    //処理実装
    return sText;

返し値はreturnで返します。
これもよくあるやつです。

呼び出し
    変数 = [self returnkansu:(@"返し値ありの関数")];


Objective-Cでは関数をメソッドといいいます。
[オブジェクト名 メソッド名1:引数1]




■今回の関数版を全部まとめたのがサンプルはこちら↓



■実行結果

これで、だいたい関数の使い方はわかりましたか??

hファイルの手前の - とか、どんな意味なのか?
引数が増えたら、どうするかとか?
スコープの範囲とか?

いろいろと謎も残っていると思いますが、
細かいことは気にしないで、今回はこのくらいで。

2012年12月23日日曜日

002-ポインター変数について(Xcode, Objective-C)

前回に引き続き変数についてです。

変数は数値しか格納できないらしくて、
ポインター変数を使うと文字列やオブジェクトを格納できるそうです。

ポインター変数??

Cとかやっている人にはおなじみらしいのですが。。。

ポインター変数とは、
メモリ上のオブジェクトのアドレスを指し示しているアドレスを
格納している変数です。

■生成
NSString *sText = [NSString stringWithFormat:@"ハローワールド"];
    or
NSString *sText = @"ハローワールド";

■使用
oLabek.Text = sText;

NSStringのNS とはMacの古いOSのNextStep
から、来ているそうです。歴史を感じますね。

また、文字列は

NSString *sText1 = [NSString stringWithFormat:@"%@World", @"Hello"];

のような使い方もできます。

phpでいうsprintfの使い方に近いですかね。

文字列なら → %@
整数なら → %d
小数点なら→ %f

■例
NSString *sText2 = [NSString stringWithFormat:@"パイナップルは%d個あります。", 5];
NSString *sText3 = [NSString stringWithFormat:@"彼の英語の偏差値は%fです。", 32,45];








001-変数について(Xcode, Objective-C)

Objective-Cの変数と関数の使い方にちょっと苦戦したので、メモ書きします。

何かあまりにも斬新すぎて、いや本当についていけないです。
CとかC+とかC#とかC♭とか本当よくわかないんですけど、
ダラダラ愚痴りながら頑張っていこうと思います。

とりあえずの目標は、Androidで作成したアプリをiPhoneでもリリースできるようにです。

っで、
表題の件ですが。。。。。


数値型の変数宣言

int i;
i = 100;

javaとかと同じ感覚でつかえますね。

float f = 0.5f;
    or
float f = 0.5;
BOOL bErr = YES;
Bool     bEr  = Trie
Boolean bE = true

float型は"f"を付けても、付けなくてもいいそうです。
BOOL型とBool型とBoolean型との3つは
全部同じ

真(YES, TRUE, true)は1
偽(NO, FALSE, false)は0

数値型なので、
Bool型同士でかけ算とかできます。
複数処理内でのエラーを探す際には
結構使えそうです。

YESとかTRUEとかいっぱい
あるけど、何でだろう??
APPLEさんのオススメがYES
とかNOらしいです。

2012年12月16日日曜日

unrecognized selector sent to class エラー??

こんなエラーが出てしまいました。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '+[UILabel label]: unrecognized selector sent to class


何が悪いのか、ググってもよくわかりません。。 格闘すること、小一時間。いや2時間くらいかな??

原因判明

hファイルに

UILabel*  oLabel;

と宣言していたのに

mmファイルにも

oLabel = [UILabel ~];

と記述していたのが原因でした。

これは、ググっても見つからないね。
だって、普通のミスなんだもん。

ということで、今回は終了です。

同じ理由で困っていたという方は
あまりいないと、思うのですが。。。







2012年12月15日土曜日

#defineとconstどちらを使えばいいのかな??

xcodeの特徴なのか、objective-cの特徴なのか,
ユーザー定義型を使う際に
defineconst
を使う方法があります。

例)
iTARGETに整数型の10を定義したい場合

#define iTARGET 10
const int iTARGET =10;

どちらの方がいいでしょうか??

define
文の最後に「;」がなくて
import感覚で使うっぽいですね。
undefで上書きもできます。
受験の時、覚えた英単語なので、

何となくわかりやすい。


const
CとかVB感覚ですかね。
変数の型を指定できることと、
範囲を指定できるのが特徴です。

。。。。
。。。。

うんまあ、今回の検証結果は
constの勝ちですかね。
defineは定義型が上書きokとか、
結構ファンキー!!
変数の影響範囲を決められないのも、痛いですね。