iOS アプリ開発はじめました (1)
まったく個人的なメモ。
登録など
- iOSデバイスの準備
- Xcode5時代の「かんたん」iOSアプリ開発セットアップ
- 開発者を識別するための証明書の作成と登録
- 開発用デバイスの登録
- アプリケーションIDの作成
- 開発中のアプリケーションを実機にインストールするための「プロビジョニングプロファイル」の作成
まずは公式のドキュメント
- iOS ヒューマンインターフェイス ガイドライン (2014/03/10 更新)
- アプリの外部設計に関すること、iOS の機能をどう活かすべきについて書かれている
- 「起動画像」はいろいろなアプリを実際に観察してみてなるほどと思った
- iOS アプリケーション プログラミングガイド (2013/10/23 更新)
- アプリの内部設計の解説
- iOS View Controller プログラミングガイド (2012/12/13 更新)
- iOS View Controller カタログ (2012/02/16 更新)
- フレームワークで提供されている View Controller を知っておけば、自分で作るよりも早く簡単に品質の高いアプリを作れる
Storyboard を使って UI を設計する
Storyboard の一般的な使い方についてはこちら
カスタムビューの設定方法はこちら
カスタムビューを初期化する
UIView を継承したクラスを作ると、 Xcode により initWithFrame というメソッドのコードが自動生成される。
しかしながら Storyboard を使って View クラスを設定すると initWithFrame が呼ばれない。代わりに initWithCoder のほうが呼ばれる。
書き方は initWithFrame と同じ。
- (id) initWithCoder: (NSCoder*)coder { self = [super initWithCoder: coder]; if (self) { // 初期化コード } return self; }
Objective-C について
Objective-C では、オブジェクトはすべて参照型であり、宣言するときはポインタとして宣言する。
NSString *str = @"すずめかわいい";
あらゆるオブジェクトを格納できる id 型というものもある。C における void * 型を id 型として定義したようなもの。当然オブジェクトとして使用するときは個々の型に変換する必要がある。
id obj = @"すずめかわいい"; NSString *str = (NSString *)obj; [str ...]; // 使う
Objective-C で文字列を扱うときにたびたび出てくる @ は、文字列を NSString として初期化するための書き方。最近では NSNumber や NSArray, NSDictionary についてもこのような書き方が用意されている。
Delegate の書き方
Suzume.h
... // デリゲートの定義 @protocol SuzumeDelegate <NSObject> // 依頼したい内容を書く - (void) okometabetai: (Chawan *)ochawan; // 実装してもしなくてもよい機能を書く @optional - (void) osushitabetai: (Sara *)osara; @end @interface Suzume : NSObject // デリゲートの宣言。プロパティ delegate としてアクセスする @property (nonatomic, assign) id<SuzumeDelegate> delegate; ... @end
Suzume.m
- (void)someMethod { // 必ず定義されている [_delegate okometabetai: ochawan]; // @optional を指定しているので、メソッドが存在するかどうか調べている if ([_delegate respondsToSelector: @selector(osushitabetai:)]) { [_delegate osushitabetai: osara]; } }
プロパティの頭に _ を付ける (_delegate のように) と、直接プロパティの操作ができる。self.prop のようにすると getter/setter が呼ばれる、とのこと。