-iPhone,iPadプログラミングについて

*Xcode [#p0528664]

**用語集 [#x0a9c18d]

|インスペクターペイン|プロパティ編集|
|ライブラリーペイン|フォーム部品|

*Objective-C [#kc6362d8]

**一行知識 [#h84e1d64]

|#import|<>だと標準ライブラリのディレクトリから検索。""だと現在のディレクトリから検索。一度読み込んだものは再度読み込まない。|
|ViewController間での値の共有|プロジェクト名Delegateのプロパティを利用する。[[UIApplication sharedApplication] delegate]]で取得可能|
|IBOutlet|InterfaceBuilderの部品のプロパティにつける接頭語。IBActionも同様|
|IBAction|イベントプロシージャーのようなもの。|
|XXXAppDelegate.h|Androidで言うところのライフサイクルを管理する。アプリケーションコントローラー|
|XXXViewController.h|Viewのコントローラー。xibファイルを持つ|
|オブジェクト型の変数|ポインタなので*varNameのように*が必要。|

**Javaとの比較 [#e2fa3910]

プロパティはJavaと同じ感覚でつかえるけど、メソッドの呼び方が他の言語と比べると特殊。メソッド呼び出しがネストしてたら目も当てられない複雑さ。

|this.someMethod(arg1, arg2)|[self someMethod:arg1 arg2:arg2]|
|Hoge hoge = new Hoge();|Hoge *hoge = [[Hoge alloc] init];|
|Array|NSArray|
|List|NSMutableArray|
|Map|NSMutableDictionary|
|interface|protocol|
|view.getI()|sender.tag|
|プリファレンス|NSUserDefaults|

***インスタンス変数 [#ceacdd70]

結構混乱したので記述しておく。インスタンス変数は基本privateなものをさす。property宣言をすると自動的にインスタンス変数とアクセスメソッドが作成されるようだ。javaだとインスタンス変数はスコープに関係ないが、Objective-Cにおいてはprivateなものと解釈するのが安全。

**ARCとは [#j88e3d0c]

参照カウントを自動でやってくれる機構。コンパイル時にソースに参照上げ下げなどを挿入してくれる。

*iOS [#j529f156]

**プロジェクトファイルの構成 [#y1a2abf2]

一つのViewControllerだけのアプリケーションであればシンプルで、ViewControllerで使いたい部品をViewController.hに接続してあげればよい。アプリ全体の起動、終了にかかわることはViewControllerに記述するのではなく、AppDelegateにまさに委譲している。これにより複数ViewControllerがあるアプリでも、アプリ全体に関する設定の記述を迷わなくてすむのだ。

**アプリケーションデリゲート [#y8329526]

イベントの通知をうけるメソッドを定義してある。Androidでいうところのライフサイクルイベント。どのときに呼ばれるかはメソッド名を見れば一目瞭然。またActivityにListenerを実装するようにコントローラー自体にdelegateメソッドを持たせることも可能。その場合はViewController.hでプロトタイプを宣言しておく。たとえばUITextFieldDelegateを実装する場合は<UITextFieldDelegate>と宣言し、実装クラスでtextFieldShouldReturnメソッドを実装する。UIAlertViewにもdelegateを指定することができる。ボタン押されたときの処理分岐をViewControllerで実装することができる。

**複数Viewでの情報共有 [#a27fc3f3]

アプリケーションデリゲートにプロパティを追加する。そのプロパティを各ViewControllerで利用する。なお利用するためにはimport文が必要

**TavBarにViewを追加するときの手順 [#e4f54712]

+テンプレートからCoCoaTouchのUIViewControllerのサブクラスを選択。h,m,xibの3ファイルができる
+タブアイテムを選択し、Identifyでクラスと結びつける。Attributeでxibと結びつける


**コード内でUI部品の追加 [#e6e48136]

 UILabel *label = [[[UILabel alloc] init] autorelease];
 [self.view addSubview:label];

*お役立ちリンク集 [#cf517e57]

http://golog.plus.vc/iphone/906/
http://d.hatena.ne.jp/moto_maka/20110425/1303673150

*Xcode4 [#s6de4a5c]

**ナビゲータエリア [#edcf650f]

eclipseのパッケージエクスプローラーの位置にある。通常はファイル表示。シンボルナビデーターでクラス名やメソッド名のみ表示させることができる。

**エディタ [#wa8da91d]

|アシスタントエディターの分割|Viewメニューから選べる。また右上のプラスボタンで分割できる|
|アシスタントエディターで開く|Option(Alt) を押しながらクリックする|
|開く場所を選ぶ|Option(Alt)+Shift を押しながらクリックする|
|メソッド定義へ飛ぶ|Command(Windows)を押して、クリックか右クリックして定義へ飛ぶ|

**外部ライブラリ [#d4c9c85f]

frameworkフォルダに依存フレームワークを持ってくる

*書籍情報 [#cc13fcfc]

|書籍名|感想|場所|サポートサイト|
|iOSデバッグ&最適化技法 for iPad/iPhone|入門レベルでは必要性を感じないが、そのうち再読必要|上福岡図書館||
|10日でおぼえる iPhoneアプリ開発入門教室|サンプル、画面キャプチャー豊富でこれよい!|自宅||
|よくわかるiPhoneアプリ開発の教科書|各パーツの説明は丁寧だけど、つなぎ合わせてのサンプルが少ない。Xcode4対応版もあるので注意|NCC|http://book.mycom.co.jp/support/pc/iphonesdk_book/|
|iPhone/iPad/iPod touch プログラミングバイブル|同じ著者のAndroid本と同じくコード上で部品を配置していくスタイル。インターフェースビルダーすら使わない|NCC||
|Xcode4ではじめる Objective-Cプログラミング|ほぼObjective-C本。4.2対応。コンソールアプリから始まり最後にちょいiPhoneアプリ|NCC|http://www.rutles.net/download/Xcode4_ObjectiveC/sapotopeji.html|
|Objective-C 超入門|ほぼObjective-C本。4.2対応|NCC||

*iTunesのバックアップフォルダ移動 [#k6599017]

Cドライブバックアップ先を変更できないというクソ仕様なのでジャンクションで対応

|バックアップ先|C:\User\ユーザ名\AppData\Roaming\Apple Computer\MobileSync\Backup|

+新しいバックアップ先を作成し、上記backupディレクトリ毎移動
+以下のコマンドを実施。MybileSyncにbackupディレクトリが存在するとエラーとなるので注意

 mklink /J "C:\User\ユーザ名\AppData\Roaming\Apple Computer\MobileSync\Backup" "d:\new\backup"

*iOS開発読み直し [#xe6f4c87]

-OutletはViewをイベントリスナーで操作したいときに必要。
-通常のボタンなどはアクションでViewControllerにひもづけるだけでよいが、Webのロード完了のようにコールバックが必要なものはDelegateとしてViewControllerに処理は移譲する。
基本的にimplementsの代わりに<xxx,yyy>と記述する感じだ。

トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS