.21 2011
どうも。
hayateです。
今日はデバッグの基本”ログ出し”についてメモっときますです。
Objective-Cでログ出しといえばNSLogです。
void NSLog (
NSString *format,
... );
この「NSString *format, ...」をうまく使って効果的なログを出力しましょう。
C言語のprintfと同じ感覚で使えます。
リファレンス(NSString フォーマットについて)はこちらよく使うものは以下4つかな。
%@ :Objective-Cのオブジェクト(NSStringとか)
%d :整数(intとか)
%f :浮動小数点(doubleとかfloatとか)
%.3fと指定することで桁数を指定できる
%s :言語の文字列(NULLターミネートされた文字列)
■便利な使い方
C言語の定義済みマクロ
__FILE__ :ファイル名
__LINE__ :行数
__func__ :関数/メソッド名(__PRETTY_FUNCTION__でも可)
※注意:__FILE__、__func__はNSStringではなくC言語の文字列なので%sを使う。__LINE__は%d。
いろんな場所でNSLogを使ってると、どのログがどこで出力されたものか判別しづらくなります。そこで、この定義済みマクロを上手に使ってどこで出力したログかをはっきりさせます。
Objective-Cのオブジェクトを%@で出力 例:
NSArray *array = [NSArray arrayWithObjects:@"one", @"two", @"three", nil];
NSLog(@"%@", array);
結果:
2011-02-21 16:12:22.540 Test[2665:207] (
one,
two,
three
)
これを使うと、NSArrayやNSDictionaryの中身をドーンと吐き出せます。
Objective-Cのオブジェクトをフォーマットの引数に与えると、自動的にそのオブジェクトのdescriptionWithLocale:もしくはdescriptionメソッドが実行され、オブジェクトの内容が文字列で出力されます。NSArrayやNSDictionaryなどは、自身が持つデータの内容を文字列で吐き出すように作られているため上のような結果になるわけです。
自前のクラスの場合、descriptionをオーバーライドして、イイ感じの文字列を吐くようにしておく必要があります。
ちなみに、descriptionWithLocale:とdescriptionはNSObjectのメソッド。
便利な変換関数
NSString * NSStringFromCGRect ( CGRect rect )
NSString * NSStringFromCGPoint ( CGPoint point )
NSString * NSStringFromCGSize ( CGSize size )
CGRectなどをNSStringに変換してくれる関数が用意されています。UIViewの領域がどうなってるか知りたいってことはよくあります。そんな時に活躍する関数ですね。
他にもいろいろあるのでXcodeのエディタ上でNSStringFromまで入力してescを押してみるとよいです。
余談ですけど、逆変換もできます
CGPointFromString(@"{3.0,2.5}")
これでCGPointが返る。
便利関数のリファレンスはこちらとまぁ、こんなもんです。
欲を言えば、こいつらを駆使したログ出力マクロを作っておくといいですね。
では。
スポンサーサイト
.23 2010
はい、どうもこんばんわ。
Hayateです。
あ~iPhoneアプリ作ってみたい。
そう思ったらまず何から手を着けたらいいでしょう?
今日はiPhoneアプリ開発入門について書こうと思います。
だって、何から手つけたらいいか全然わかんないんだもの。
とりあえず、やらないといけないのは、Macの用意、Developer登録やSDKのダウンロードですが
その辺は詳しいサイトにまかせるとして、
ここでは
何をどう勉強していくかに焦点をあてます。
■iPhoneアプリ開発学習の始め方私的に考えるまず勉強すべきポイントは以下の5つ。
1.Programing Guide for iPhone SDKを読む
2.Objective-Cの勉強
3.InterfaceBuilderのことを知る
4.UIKitを使ってみる
5.とにかく作る。
では、ひとつずつ
1.Programing Guide for iPhone とりあえず読む。というより「見る」程度でいいかと思います。
わかるところはわかるし、わからんところはわからんわからん。
それでいいと思います。また、あとで読めばOK。
どんなことが書かれているかさえ覚えておけば、後々必要に応じてじっくり読みます。
2.Objective-C これはもう本を買って勉強。読んで、書いて、慣れる。
言語の知識は基本中の基本なのでしっかり知って扱いに慣れることです。
私的にまずおさえたいポイントを挙げるとすれば
・メッセージ (独特なので)
・メモリ管理 (大事なので)
・プロパティ (知らないとわけわかんなくなるので)
・デリゲート (大事なので)
注:他言語でのプログラミング経験・知識がある人が前提で書いてます。
3.InterfaceBuilder 本や、webの入門記事を見ると、このInterfaceBuilderを使っていることが多い。
使ってもいいし、使わなくてもいい。どっちにしてもどんなものかは知っておくべきです。
4.UIKit iPhoneアプリを構成する部品たちです。使い方を覚えながら使ってみます。
5.とにかく作る。 上記4つを勉強しつつも、とにかく作る。手を動かすこと。
これでいけます!
あとは、作りたいアプリに必要な技術を調べて幅を広げていけばOK!
勉強し始めは、いろんなサイトや本を見ながら勉強すると思いますが
書いた人によって思想がまちまちなため混乱しがちです。
その辺を見分けられるだけの基礎をおさえるのは大事ですね。
目指せ、脱初心者!
というわけでまた来週。
.11 2010
Hola!
KIMURAです。
今回はまず最初に周知事項から。
今月より、
TASAKI、
Oogamiが客先常駐となりましたので、今後しばらくは
KIMURA、
Koyanagiで記事を書いて行きますのでよろしくお願いします。
さてさて、今日は
UIViewに
addSubViewした時の話。
このブログの過去の記事で
TASAKIが書いている様に、ココ最近はInterfaceBuilderを使用していないのが現状です。。。
そうした場合、
UITextField、
UILabel等の部品をコード上で生成(alloc)し、プロパティの設定をして
addSubViewするのですが、UIViewのプロパティである「tag」に任意のユニークな値を設定することで、後からそのコントロールにアクセスすることが可能になります。
UITextField* textField;
textField = [[[ UITextField alloc] initWithFrame: CGRectMake( 21.0, 40.0, 274.0, 30.0 )]autorelease];
textField.borderStyle = UITextBorderStyleRoundedRect;
textField.keyboardType = UIKeyboardTypeDefault;
textField.returnKeyType = UIReturnKeyDone;
textField.borderStyle = UITextBorderStyleRoundedRect;
textField.clearButtonMode = UITextFieldViewModeAlways;
textField.keyboardAppearance = UIKeyboardAppearanceAlert;
textField.autocorrectionType = UITextAutocorrectionTypeNo;
textField.tag = 10; textField.delegate = self;
[ xxxxx addSubview: textField ];
の様に設定し、他のメソッドからは
UITextField* textField = ( UITextField* )[ xxxxx
viewWithTag: 10 ];
でアクセスするということですね。
InterfaceBuilderを使用しない実装の場合に重宝します。
では、今日も遅いのでこの辺で。。。
Ciao!
.27 2010
Hola!
KIMURAです。
今日は
「MKMapView」で現在地にピンを立てる話です。
これまたある意味
『失敗談』になって恥ずかしいんですが、現在地を
「CLLocationManager」で取得した後に、その座標を元に
「MKAnnotation」で現在地にピンを立てようとしたら
何故かピンが2つ同じ場所に立ってしまったんですよね。
で、調べてみたら
[map setShowsUserLocation:YES];
という記述ですでに現在地が表示される、と。
さらに
「addAnnotation」した時に呼ばれるメソッド
「viewForAnnotation」で現在地情報かどうかの判定を入れてなかったため、2本の同じピンが同一の場所に立ってしまってたようです。
なので、「現在地表示」の場合はわざわざ
「Annotation」を作成、追加しないでも
[map setShowsUserLocation:YES];
の設定だけで現在地が表示されます。
で、
「viewForAnnotation」を自前で準備しなければデフォルトの水色の玉(と周りのわっか)が表示されます。
#「viewForAnnotation」を利用する為には「setDelegate」でデリゲートの設定が必要です。いま開発中のアプリではデフォルトの水玉の方を採用する様にしました。
ここで1点
注意。
[map setShowsUserLocation:YES];
で現在地に水玉は設定してくれますが、
「setRegion」で表示したい場所を指定してあげないと、画面上には
ガーナの南側の海(経度0、緯度0)が表示されちゃいますw
では、今日はこの辺で。。。
Ciao!
.20 2010
Hola!
KIMURAです。
今日は
「InterfaceBuilder」について少々。
多くの
『iPhoneアプリ開発技術者』と同じ様に、私も最初は書籍&ネットの解説サイトで勉強したクチです。
で、その多くが画面の作成には
「InterfaceBuilder」を使用して開発しています。
私がiPhoneアプリ作成の勉強を始めたのが去年の秋頃で、最初は書籍&解説サイトの通り
「InterfaceBuilder」を利用していました。
ところが、、、
ネクストシステムに転職後、支給されたMacBookで今まで通り
アウトレットと
アクションを追加しようとしたら今までのトコに見当たらない!
どうやらOSの進化
(Leopard → SnowLeopard)に伴い、
「InterfaceBuilder」もバージョンアップしたようで、そこいら辺の使い方がガラッと変わったようでした。。。
その後は、ここの古い記事にもある様に
InterfaceBuilderを使用しない開発で進めています。
どちらの方法も一長一短あると思うので、時間が出来たら
「InterfaceBuilder@SnowLeopard」の方も勉強して行くつもりですが
『時間』っていつ出来るものやら・・・(-_-;
以上