第1回
AndroiderのためのiOS勉強会
【入門編】
2012年8月4日
木下 照章
@metal_president
1
1
自己紹介
•岐阜県のソフトピアジャパンというところで、株式会社グルーヴシステム
ズという会社をやっています。
•制御系(C,VB,VC) 業務系(Java, PHP) アプリ系(Objective-C, Lua)
•2009年7月頃 iPhon...
はじめに
Copyright (C) 2012 Groove Systems All Rights Reserved. 3
•iOSアプリよりAndroidアプリの方が難しいと思います(個人の意見です)
•Objective-C よりJavaの...
本日の進め方
Copyright (C) 2012 Groove Systems All Rights Reserved. 4
簡単なアプリを楽しく作りながら
基礎的なスキルを
身に付けていきたいと思います。
楽しくなかったらゴメンナサイ。
4
Copyright (C) 2012 Groove Systems All Rights Reserved. 5
レベル1
(Xcodeの使い方)
5
プロジェクトを作成しよう①
Copyright (C) 2012 Groove Systems All Rights Reserved. 6
メニューの [File] [New] [Project...]
標準的なテンプレート
6
プロジェクトを作成しよう②
Copyright (C) 2012 Groove Systems All Rights Reserved. 7
Universalは 1バイナリでiPhone/iPadに対応したア
プリ(iPadの2倍モードではな...
プロジェクトを作成しよう③
Copyright (C) 2012 Groove Systems All Rights Reserved. 8
プロジェクトを保存するフォルダ
を選択してください。
8
ちょっと準備しますね...
Copyright (C) 2012 Groove Systems All Rights Reserved. 9
9
Xcodeを使ってみよう①
Copyright (C) 2012 Groove Systems All Rights Reserved. 10
ツールバー
ナビゲータエリア
エディッタエリア
デバッグエリア
ライブラリ・ペイン
ライブラリ選択バ...
Xcodeを使ってみよう②
Copyright (C) 2012 Groove Systems All Rights Reserved. 11
小さいディスプレイでは表示を切り替えながら使いましょう。
スタンダードエディッタ
アシストエディッタ...
Xcodeを使ってみよう③
Copyright (C) 2012 Groove Systems All Rights Reserved. 12
•[command] + [Z] でUndo、[shift] + [command] + [Z] で...
Xcodeを使ってみよう④
Copyright (C) 2012 Groove Systems All Rights Reserved. 13
とりあえず実行してみましょう。
①
②
シミュレータが起動され、右→
のような画面が表示されるはずで...
Copyright (C) 2012 Groove Systems All Rights Reserved. 14
レベル2
(仕組みをザックリ理解する)
14
作成されたファイルを見てみよう
Copyright (C) 2012 Groove Systems All Rights Reserved. 15
Androider1-Prefix.pch
全てのソースファイルでインクルードされるヘッダファイル...
突然のプレゼン資料追加 Xcode4.4変更点
Copyright (C) 2012 Groove Systems All Rights Reserved. 16
• ソースファイルのヘッダに記載するCopylightの組織名をプロジェクト作成...
カスタマイズしてみよう①
Copyright (C) 2012 Groove Systems All Rights Reserved. 17
いきなりローカライズしてみる。
InfoPlist.strings
Japaneseを追加
【Info...
カスタマイズしてみよう②
Copyright (C) 2012 Groove Systems All Rights Reserved. 18
さらにローカライズしてみる。
Localizable.strings を作成 [Resource]→[...
カスタマイズしてみよう③
Copyright (C) 2012 Groove Systems All Rights Reserved. 19
またさらにローカライズしてみる。
タブメニューのアイコンに first.png と second.png...
JavaとObjective-Cの比較
Copyright (C) 2012 Groove Systems All Rights Reserved. 20
Java Objective-C
論理型 true / false YES / NO
自...
Copyright (C) 2012 Groove Systems All Rights Reserved. 21
レベル3
(アプリで最も重要な画面のデザイン)
21
画面をデザインしてみよう①
Copyright (C) 2012 Groove Systems All Rights Reserved. 22
•iPhoneの画面サイズはヨコ320px×タテ480pxで画面上部のステータスバーは
高さ20px...
画面をデザインしてみよう②
Copyright (C) 2012 Groove Systems All Rights Reserved. 23
•InterfaceBuilderを使って画面をデザインします。Xcode3では別プログラ
ムとして...
画面をデザインしてみよう③
Copyright (C) 2012 Groove Systems All Rights Reserved. 24
FirstViewController.xib
•『File’s Owner』:xibファイルのオー...
画面をデザインしてみよう④
Copyright (C) 2012 Groove Systems All Rights Reserved. 25
FirstViewController.xib
1. 元々貼り付いているLabelとTextView...
画面をデザインしてみよう⑤
Copyright (C) 2012 Groove Systems All Rights Reserved. 26
FirstViewController.xib
•Size Inspectorを選択し、2つのTex...
画面をデザインしてみよう⑥
Copyright (C) 2012 Groove Systems All Rights Reserved. 27
FirstViewController.xib
この設定はViewのサイズを決定するための設定
で、...
画面をデザインしてみよう⑦
Copyright (C) 2012 Groove Systems All Rights Reserved. 28
UIパーツ
28
xibとプログラムをつなげる①
Copyright (C) 2012 Groove Systems All Rights Reserved. 29
FirstViewController.xib
ユーティリティエリアを閉じて、アシスタントエディ...
xibとプログラムをつなげる②
Copyright (C) 2012 Groove Systems All Rights Reserved. 30
FirstViewController.xib
アウトレット:xibファイル内のViewとコード...
xibとプログラムをつなげる③
Copyright (C) 2012 Groove Systems All Rights Reserved. 31
FirstViewController.hには一行ずつしか追加されませんでしたが、FirstVi...
xibとプログラムをつなげる④
Copyright (C) 2012 Groove Systems All Rights Reserved. 32
FirstViewController.xib
アクション:Viewのイベントに対応した動作(ボ...
アクションに処理を実装します
Copyright (C) 2012 Groove Systems All Rights Reserved. 33
-	
 (IBAction)pressedConfirm:(id)sender	
 {
	
 	
...
Copyright (C) 2012 Groove Systems All Rights Reserved. 34
レベル23
(あくまで基礎だけど居眠りしてると終る)
34
Objective-C基礎① インスタンスとメソッド
Copyright (C) 2012 Groove Systems All Rights Reserved. 35
•ポインタの説明はしませんよ!!(ポインタ=インスタンスが保存されてる
メ...
Objective-C基礎② メモリ管理
Copyright (C) 2012 Groove Systems All Rights Reserved. 36
•Objective-Cのメモリ管理 = 参照カウント(Reference Count...
Objective-C基礎③ プロパティとアクセッサメソッド
Copyright (C) 2012 Groove Systems All Rights Reserved. 37
•オブジェクトの属性をプロパティと呼び (インスタンス名).(プロ...
Objective-C基礎④ プロパティで遊んでみる-その1
Copyright (C) 2012 Groove Systems All Rights Reserved. 38
【FirstViewController.m】
@implemen...
Objective-C基礎④ プロパティで遊んでみる-その2
Copyright (C) 2012 Groove Systems All Rights Reserved. 39
【FirstViewController.m】
@implemen...
Copyright (C) 2012 Groove Systems All Rights Reserved. 40
レベル24
(5分で簡易ブラウザを作ってみる)
40
簡易ブラウザを作ってみる①
Copyright (C) 2012 Groove Systems All Rights Reserved. 41
SecondViewController.xib
41
簡易ブラウザを作ってみる②
Copyright (C) 2012 Groove Systems All Rights Reserved. 42
SecondViewController.h
次のようにアウトレットを作成してください。
Secon...
Copyright (C) 2012 Groove Systems All Rights Reserved. 43
レベル25
(リストを作ってみる)
43
リストを作ってみる①
Copyright (C) 2012 Groove Systems All Rights Reserved. 44
•ViewController(UIViewController)はViewを管理するクラスで、Andro...
リストを作ってみる②
Copyright (C) 2012 Groove Systems All Rights Reserved. 45
『New File...』
UITableViewControllerはUIViewControllerの...
リストを作ってみる③
Copyright (C) 2012 Groove Systems All Rights Reserved. 46
リストが選択されたら詳細画面を表示する的なUIを実現したいなー
AndroidだとstartActivit...
リストを作ってみる④
Copyright (C) 2012 Groove Systems All Rights Reserved. 47
AppDelegate.m
コピペできないとか...Xcodeの補完機能があれば楽勝なはずです!
できたら...
リストを作ってみる⑤
Copyright (C) 2012 Groove Systems All Rights Reserved. 48
ListViewController.h
48
リストを作ってみる⑥
Copyright (C) 2012 Groove Systems All Rights Reserved. 49
ListViewController.m
49
リストを作ってみる⑦
Copyright (C) 2012 Groove Systems All Rights Reserved. 50
ListViewController.m
50
リストを作ってみる⑧
Copyright (C) 2012 Groove Systems All Rights Reserved. 51
ListViewController.m
リストではAndroidと同じ様にセルViewを
再利用する仕組...
リストを作ってみる⑨
Copyright (C) 2012 Groove Systems All Rights Reserved. 52
ListViewController.m
SectionとRowという二階層の仕組みになっていることもあり...
リストを作ってみる⑩
Copyright (C) 2012 Groove Systems All Rights Reserved. 53
AppDelegate.m に追加した処理の UITableViewStylePlain を UITabl...
リストを作ってみる⑪
Copyright (C) 2012 Groove Systems All Rights Reserved. 54
ViewControllerの構造
UITabBarController
UINavigationCont...
捕足
Copyright (C) 2012 Groove Systems All Rights Reserved. 55
•Objective-Cには名前空間が無いためクラス名の頭二文字で表現していま
す。
•ワーニングは早めに消しておきましょ...
おわり
おつかれさまでした!!
Copyright (C) 2012 Groove Systems All Rights Reserved. 56
56
Upcoming SlideShare
Loading in...5
×

iOS Apps Development for Androider part1

2,503

Published on

2012/8/4 iOS勉強会の資料

Published in: Technology
0 Comments
9 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,503
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
41
Comments
0
Likes
9
Embeds 0
No embeds

No notes for slide

Transcript of "iOS Apps Development for Androider part1"

  1. 1. 第1回 AndroiderのためのiOS勉強会 【入門編】 2012年8月4日 木下 照章 @metal_president 1 1
  2. 2. 自己紹介 •岐阜県のソフトピアジャパンというところで、株式会社グルーヴシステム ズという会社をやっています。 •制御系(C,VB,VC) 業務系(Java, PHP) アプリ系(Objective-C, Lua) •2009年7月頃 iPhoneアプリ開発開始 •2010年7月頃 Androidアプリ開発開始 •最近イロイロなところで講師をやっています。 •Twiter ID : @metal_president Copyright (C) 2012 Groove Systems All Rights Reserved. 2 2
  3. 3. はじめに Copyright (C) 2012 Groove Systems All Rights Reserved. 3 •iOSアプリよりAndroidアプリの方が難しいと思います(個人の意見です) •Objective-C よりJavaの方が難しいと思います(個人の意見です) •EclipseよりXcodeの方が楽チンだと思います(個人の意見です) •Objective-C コワイって言ってる人を黙らせます!!(本日の意気込み) 3
  4. 4. 本日の進め方 Copyright (C) 2012 Groove Systems All Rights Reserved. 4 簡単なアプリを楽しく作りながら 基礎的なスキルを 身に付けていきたいと思います。 楽しくなかったらゴメンナサイ。 4
  5. 5. Copyright (C) 2012 Groove Systems All Rights Reserved. 5 レベル1 (Xcodeの使い方) 5
  6. 6. プロジェクトを作成しよう① Copyright (C) 2012 Groove Systems All Rights Reserved. 6 メニューの [File] [New] [Project...] 標準的なテンプレート 6
  7. 7. プロジェクトを作成しよう② Copyright (C) 2012 Groove Systems All Rights Reserved. 7 Universalは 1バイナリでiPhone/iPadに対応したア プリ(iPadの2倍モードではない) iOSではMultiple APKに相当するものが無いので、 Universalアプリか別アプリかの二択 Androidでのパッケージ名に相当 アンダースコアは不可 7
  8. 8. プロジェクトを作成しよう③ Copyright (C) 2012 Groove Systems All Rights Reserved. 8 プロジェクトを保存するフォルダ を選択してください。 8
  9. 9. ちょっと準備しますね... Copyright (C) 2012 Groove Systems All Rights Reserved. 9 9
  10. 10. Xcodeを使ってみよう① Copyright (C) 2012 Groove Systems All Rights Reserved. 10 ツールバー ナビゲータエリア エディッタエリア デバッグエリア ライブラリ・ペイン ライブラリ選択バー インスペクタ・ペイン インスペクタ選択バーナビゲータ選択バー ※ユーティリティエリア:インスペクタ+ライブラリ 行番号表示 [Preferences] [Text Editing] ”Line numbers” 10
  11. 11. Xcodeを使ってみよう② Copyright (C) 2012 Groove Systems All Rights Reserved. 11 小さいディスプレイでは表示を切り替えながら使いましょう。 スタンダードエディッタ アシストエディッタ バージョンエディッタ ナビゲータエリアの切替 デバッグエリアの切替 ユーティリティエリアの切替 •ファイルはワンクリックで開きます。ダブルクリックすると別画面になります。 •「タブが無いと不安だ!」という人は[View] [ShowTab Bar]で表示してください。 Eclipseのタブとは動作が異なります。 •【ソースコード内】[option] + クリック でリファレンス表示、[command] + クリックで定 義表示 11
  12. 12. Xcodeを使ってみよう③ Copyright (C) 2012 Groove Systems All Rights Reserved. 12 •[command] + [Z] でUndo、[shift] + [command] + [Z] でRedo •[command] + [F] で検索、[command] + [G] で次を検索、 [shift] + [commnad] + [G] で前を検索 •[shift] + [command] + [F] で全体検索 •[command] + [L] でジャンプ •[command] + [ で tab 削除、[command] + ] で tab 追加 •[command] + [S] で保存 •[command] + [N] でファイル新規作成 •[shift] + [command] + [N] でプロジェクト新規作成 •[esc] で補完候補表示 •[shift] + [command] + [J] でナビゲータエリアをプロジェクトナビゲータに •【デバッグ】[control] + [command] + [Y]:pause or continue / [command] + []:add break point / [F6]:Step Over / [F7]:Step Into / [F8]:Step Out 12
  13. 13. Xcodeを使ってみよう④ Copyright (C) 2012 Groove Systems All Rights Reserved. 13 とりあえず実行してみましょう。 ① ② シミュレータが起動され、右→ のような画面が表示されるはずです。 タブメニューで画面が切り替わります。 [command] + [R] 13
  14. 14. Copyright (C) 2012 Groove Systems All Rights Reserved. 14 レベル2 (仕組みをザックリ理解する) 14
  15. 15. 作成されたファイルを見てみよう Copyright (C) 2012 Groove Systems All Rights Reserved. 15 Androider1-Prefix.pch 全てのソースファイルでインクルードされるヘッダファイル (プリコンパイルヘッダ) main.m 最初にコールされる main() 関数を含むファイル UIApplicationMain() をコールしてAppDelegateを作成しています AppDelegate.h / m アプリケーションデリゲート アプリケーションの大本となる処理を記述します Androider1-Info.plist アプリケーションの動作環境を定義するファイル AndroidのManifestに近い InfoPlist.strings Info.plist をローカライズする時に使用するファイル アプリ名を言語毎に切り替える時等に利用します ???ViewController.h / m UIViewControllerクラスのサブクラスで通常画面ごとに作成 ※ViewControllerについては後ほど詳しく説明します ・Objective-C では ヘッダファイルは .h、ソースファイルは .m  (Objective-C++は .mmですがマイナーです) ・C言語がベースなので main() から始まるがアプリとしての処理はAppDelegate以下に記述 15
  16. 16. 突然のプレゼン資料追加 Xcode4.4変更点 Copyright (C) 2012 Groove Systems All Rights Reserved. 16 • ソースファイルのヘッダに記載するCopylightの組織名をプロジェクト作成時に設定可能 に • プロジェクトテンプレートの[OS X]→[Other]→[In-App Purchase Content]が追加 • プロジェクトテンプレートの[OS X]→[System Plug-In]→[Sync Schema]が廃止 • [New File] →[CocoaTouch]/[Cocoa] →[Objective-C class extension]が追加 • コード補完とクイックヘルプが統合 • 3Dモデルエディッタ追加(DAE) • Icon ComposerがGraphicsTools の一部になった • ベースのローカリゼーションが追加されローカライズが容易になった • 新規のCocoaアプリケーションは初期設定が64-bit Intelとなる • Gitのチェリーピッキングをサポート 16
  17. 17. カスタマイズしてみよう① Copyright (C) 2012 Groove Systems All Rights Reserved. 17 いきなりローカライズしてみる。 InfoPlist.strings Japaneseを追加 【InfoPlist.strings(English)】 追加 CFBundleDisplayName = "Android"; 【InfoPlist.strings(Japanese)】 追加 CFBundleDisplayName = "緑ロボ"; 上記2つの記述を追加し、シミュレータの言語設定を 切り替えてアプリのタイトルを確認してください。 ※ Xcode4.4以降はこの手順では不可 [command] + [S] で保存 17
  18. 18. カスタマイズしてみよう② Copyright (C) 2012 Groove Systems All Rights Reserved. 18 さらにローカライズしてみる。 Localizable.strings を作成 [Resource]→[Strings File] し、Japaneseを追加する。 【Localizable.strings(Japanese)】 追加 "First" = "一つ目"; "Second" = "二つ目"; 上記2行を追加したら、 シミュレータの言語設定を切り替えてタブメニューのタイトルを 確認してださい。 これは、FirstViewController.m / SecondViewController.m 内で使用しているNSLocalizedString() によるものです。  書式 : NSLocalizedString(key, comment);  ・key : Localizable.strings から文字列を取得する際のキー  ・comment : genstring ツールを利用して Localizable.strings を自動生成する際のコメント Localizable.strings 内にキーに対応する定義が存在しない場合は key を返します。 18
  19. 19. カスタマイズしてみよう③ Copyright (C) 2012 Groove Systems All Rights Reserved. 19 またさらにローカライズしてみる。 タブメニューのアイコンに first.png と second.png という画像が使用されています。端末が 日本語設定の場合は、このアイコンを逆に表示してみます。 【Localizable.strings(Japanese)】 追加 "FirstIcon" = "second"; "SecondIcon" = "first"; 【Localizable.strings(English)】 追加 "FirstIcon" = "first"; "SecondIcon" = "second"; 【FirstViewController.m】 22行目 self.tabBarItem.image = [UIImage imageNamed:NSLocalizedString(@"FirstIcon", nil)]; 【SecondViewController.m】 22行目 self.tabBarItem.image = [UIImage imageNamed:NSLocalizedString(@"SecondIcon", nil)]; 19
  20. 20. JavaとObjective-Cの比較 Copyright (C) 2012 Groove Systems All Rights Reserved. 20 Java Objective-C 論理型 true / false YES / NO 自インスタンス this self 文字列 “hogehoge” @”hogehoge” (空) null nil ヌルポ 発生するためnullチェックが必要 発生しない(スルーする) 結果は0やnilとなるので注意が必要なケースも 例外処理 try { } catch (Exception e) { } finally { } @try { } @catch (NSException *e) { } @finally { } 拡張for文 for (int n : list) { } for (int n in list) { } ルートクラス java.lang.Object NSObject インスタンス生成 new alloc 20
  21. 21. Copyright (C) 2012 Groove Systems All Rights Reserved. 21 レベル3 (アプリで最も重要な画面のデザイン) 21
  22. 22. 画面をデザインしてみよう① Copyright (C) 2012 Groove Systems All Rights Reserved. 22 •iPhoneの画面サイズはヨコ320px×タテ480pxで画面上部のステータスバーは 高さ20pxです。iPhone4/4sなどのRetinaディスプレイでは倍の解像度ですが、 プログラム的にはあまり意識する必要はありません。 •iPadの画面サイズはヨコ768px×タテ1024pxで画面上部のステータスバーは 高さ20pxです。iPad(第3世代)のRetinaディスプレイでは倍の解像度です。 •例)非Retina用にボタン画像 Button.png を作成した場合、Retinaディスプレ イ用に倍の解像度となるボタン画像を作成し、 Button@2x.png という名前 で作成します。 •Androidではアプリアイコンのサイズは36/48/72/96pxのいずれかですが、 iPhoneは57/114px、iPadは72/144pxとなります。icon.png / icon@2x.png / icon-72.png / icon-72@2x.pngという名前で用意します。 •ヨコ320px×タテ480pxおよび2倍の画像をDefault.png / Default@2x.png という 名前で用意しておくとスプラッシュ画面として表示されます。(iPadは Default-Portrait.png / Default-Landscape.png など) 22
  23. 23. 画面をデザインしてみよう② Copyright (C) 2012 Groove Systems All Rights Reserved. 23 •InterfaceBuilderを使って画面をデザインします。Xcode3では別プログラ ムとして起動していましたが、Xcode4からは内包され、非常に使いやすく なりました。 •InterfaceBuilderで編集するのはnib(xib)ファイルです。元々nib(next interface builder)という拡張子でしたが、XML形式のxib拡張子となりました。一部で はnibという名残が残っています。xib:シブ or ジブ? •xibファイルを開くとInterfaceBuilderが起動します。 FirstViewController.xib を開いてみましょう!! 23
  24. 24. 画面をデザインしてみよう③ Copyright (C) 2012 Groove Systems All Rights Reserved. 24 FirstViewController.xib •『File’s Owner』:xibファイルのオーナーと なるオブジェクト。通常はxibと同名のクラ スとなる。 •『First Responder』:GUIの中で最初に入力 イベントを受け取るオブジェクト。デザイ ン時は意識する必要はない。 •『Objects』:xibに含まれるViewをツリー構 造で表したもの。ここでViewの構造を編集 したり、Viewを選択することができる。 24
  25. 25. 画面をデザインしてみよう④ Copyright (C) 2012 Groove Systems All Rights Reserved. 25 FirstViewController.xib 1. 元々貼り付いているLabelとTextViewを削除する。 2. 『氏名』用のLabelとTextFieldを追加する。LabelのText、 TextFieldのPlaceholder/ClearButton/FontSizeを編集する。 Labelは幅約100、TextFieldは120くらい。 3. 同様に『年齢』用のLabelとTextFieldを追加する(コピペ 推奨)。TextFieldのKeybordをNumber Padに変更する。 4. 『確認』Buttonを追加する。 同一階層内のViewは上から順に表示されるた め、下のViewが手前に表示されます。 25
  26. 26. 画面をデザインしてみよう⑤ Copyright (C) 2012 Groove Systems All Rights Reserved. 26 FirstViewController.xib •Size Inspectorを選択し、2つのTextFieldのAutosizingの設 定を左の様に変更する。 •Size Inspectorを選択し、ButtonのAutosizingの設定を右 の様に変更する。 コレで一旦実行してみてください。そしてシミュレータの向きを [Command] + [→] or [←]で回転してみてください。 26
  27. 27. 画面をデザインしてみよう⑥ Copyright (C) 2012 Groove Systems All Rights Reserved. 27 FirstViewController.xib この設定はViewのサイズを決定するための設定 で、ステータスバーやタブバーの表示とは一切関 係がありません。Orientation : Portrait も同様です。 27
  28. 28. 画面をデザインしてみよう⑦ Copyright (C) 2012 Groove Systems All Rights Reserved. 28 UIパーツ 28
  29. 29. xibとプログラムをつなげる① Copyright (C) 2012 Groove Systems All Rights Reserved. 29 FirstViewController.xib ユーティリティエリアを閉じて、アシスタントエディッタを開く。 29
  30. 30. xibとプログラムをつなげる② Copyright (C) 2012 Groove Systems All Rights Reserved. 30 FirstViewController.xib アウトレット:xibファイル内のViewとコード内の変数をつなげる仕組み Androidでの Button button = (Button) v.findViewById(R.id.MyButton) のようなもの [control] + ドラッグします。 .hファイルの @interface から @end の間にドラッグします。 Nameを入力して[Connect]をクリックします。 @property (retain, nonatomic) IBOutlet UITextField *textName; 次の1行が追加されます。(後で詳しく説明 『年齢』も同様の手順で追加しましょう。(textAge) 30
  31. 31. xibとプログラムをつなげる③ Copyright (C) 2012 Groove Systems All Rights Reserved. 31 FirstViewController.hには一行ずつしか追加されませんでしたが、FirstViewController.m では 複数箇所に処理が追加されています。(後で詳しく説明 @implementation FirstViewController @synthesize textName; @synthesize textAge; ・・・ - (void)viewDidUnload { [self setTextName:nil]; [self setTextAge:nil]; [super viewDidUnload]; } ・・・ - (void)dealloc { [textName release]; [textAge release]; [super dealloc]; } 31
  32. 32. xibとプログラムをつなげる④ Copyright (C) 2012 Groove Systems All Rights Reserved. 32 FirstViewController.xib アクション:Viewのイベントに対応した動作(ボタンをタップしたときの処理など) Androidでの Listener に近いもの [control] + ドラッグします。 .hファイルの @interface から @end の間にドラッグします。 Connectionを Actionに切り替えてNameを入力し[Connect]をクリックします。 Touch Up Insideは通常ボタンのタップで使用するイベントです。 - (IBAction)pressedConfirm:(id)sender; 次の1行が追加されます。 .m ファイルには実装部が追加されています。 32
  33. 33. アクションに処理を実装します Copyright (C) 2012 Groove Systems All Rights Reserved. 33 - (IBAction)pressedConfirm:(id)sender { NSString *msg = [NSString stringWithFormat:@"あなたの名前は%@さんで、年齢は%@歳です。", textName.text, textAge.text]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"for Androider" message:msg delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil]; [alert autorelease]; [alert show]; [textName resignFirstResponder]; [textAge resignFirstResponder]; } FirstViewController.m できました!! 横向きにも対応 33
  34. 34. Copyright (C) 2012 Groove Systems All Rights Reserved. 34 レベル23 (あくまで基礎だけど居眠りしてると終る) 34
  35. 35. Objective-C基礎① インスタンスとメソッド Copyright (C) 2012 Groove Systems All Rights Reserved. 35 •ポインタの説明はしませんよ!!(ポインタ=インスタンスが保存されてる メモリのアドレス=整数値) •インスタンスの生成は [(クラス名) alloc]; •メソッドのコールは [(変数名) (メソッド名)]; ※ [self ?????] とselfも必須 •initではじまるメソッドをイニシャライザと呼びalloc直後にコールしクラス の初期化を行う、引数無しは init で引数有りは initWith??? •alloc + init を newメソッドで実装することも 例)[NSDate new]; •汎用のオブジェクト型として id が用意されている(要するにポインタ) •C言語なのでヘッダファイルでメソッドを宣言、.mファイルで実装が基本 •メソッドの引数にはラベル名が付与できる(これがあるのでメソッド名が 長くなる)、オーバーロードは型ではなくラベル名で識別 •メソッドは次の様に宣言 【クラスメソッド】 + (id) stringWithInteger:(NSInteger)value; 【インスタンスメソッド】 - (int) getAgeWithName:(NSString*)name adress:(NSString*)address; 35
  36. 36. Objective-C基礎② メモリ管理 Copyright (C) 2012 Groove Systems All Rights Reserved. 36 •Objective-Cのメモリ管理 = 参照カウント(Reference Counting) •参照カウントはオブジェクトの参照数をオブジェクト自身が管理する仕組 •オブジェクトの生成はalloc/new/copy/mutableCopyで始まるメソッドで行い生 成直後の参照カウントは1 •誰/ドコでもオブジェクトを参照することができ、参照を追加する場合は対 象オブジェクトのretainメソッドを実行し参照カウンタを+1する •参照を終了する時点でreleaseメソッドを実行し参照カウンタを-1する •参照カウンタが0になると自動的にオブジェクトがdealloc(破棄)される •【禁止事項】retainしていないオブジェクトをrelease、retainしたまま放置、 deallocを直接コール、retainしていないオブジェクトを利用 •解放漏れを防ぐために自動解放プール(autoreleasepool)という仕組みがある •autoreleaseメソッドを実行するとオブジェクトが autoreleasepool へ登録さ れ、一定時間経過(イベント処理終了後など)するとreleaseが実行される 36
  37. 37. Objective-C基礎③ プロパティとアクセッサメソッド Copyright (C) 2012 Groove Systems All Rights Reserved. 37 •オブジェクトの属性をプロパティと呼び (インスタンス名).(プロパティ名) でアクセス可能 •プロパティはヘッダファイル内で次のように宣言 •属性にはreadonly, nonatomic, getter=(名前), setter=(名前), retain, assign, copy など •オブジェクトの場合は通常retainを指定して、代入するとretainが自動実行さ れ、他の値をセットするとreleaseが自動実行されるようにする •プロパティごとにsetter/getterを用意するが標準のメソッド名は、nameプロ パティなら setName / name となる •Objective-Cではsetter/getterをまとめてアクセッサメソッドと呼ぶ •.mファイルの@implementation∼@end(インプリメントセクション)内に @synthesize を記述するとsetter/getterの実装、インスタンス変数の宣言が省 略できます • @property (属性) 型 プロパティ名; @synthesize プロパティ名;   または   @synthesize プロパティ名 = 変数名; 37
  38. 38. Objective-C基礎④ プロパティで遊んでみる-その1 Copyright (C) 2012 Groove Systems All Rights Reserved. 38 【FirstViewController.m】 @implementation FirstViewController @synthesize textName; @synthesize textAge; @dynamic message; // @dynamicだとアクセッサを自作する、retain属性は無効になる ・・・ - (void)viewDidDisappear:(BOOL)animated { NSLog(@"%@", _message); [super viewDidDisappear:animated]; } ・・・ - (void)dealloc { [_message release]; // 参照カウンタ-1、_messageが未設定でnilでも落ちない! [textName release]; ・・・ - (void) setMessage:(NSString *)message { _message = message; [_message retain]; // 参照カウンタ+1 } - (NSString*) getMessage { return _message; } @end 【AppDelegate.m】 31行目 FirstViewController *viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease]; viewController1.message = [NSString stringWithFormat:@"%@", @"Bood Bye!"]; 【FirstViewController.h】 @interface FirstViewController : UIViewController { NSString *_message; } @property (assign, nonatomic) NSString *message; retainが無いと上のviewDidDisappearで落ちます。 値の再設定を考慮すると処理はもっと複雑に! FirstViewControllerのプロパティに値をセットしています。 NSString の stringWithFormat のようなメソッドのことをコンビニエンスコ ンストラクタと呼び、alloc + init + autorelease している。 NSLog() はログを出力する関数 %@ はオブジェクトの値を出力する時に利用 [viewController setMessage:???]でもOK message (削除) 38
  39. 39. Objective-C基礎④ プロパティで遊んでみる-その2 Copyright (C) 2012 Groove Systems All Rights Reserved. 39 【FirstViewController.m】 @implementation FirstViewController @synthesize textName; @synthesize textAge; @synthesize message = _message; ・・・ - (void)viewDidDisappear:(BOOL)animated { NSLog(@"%@", _message); [super viewDidDisappear:animated]; } ・・・ - (void)dealloc { [_message release]; // 参照カウンタ-1、_messageが未設定でnilでも落ちない! [textName release]; ・・・ (削除) @end 【AppDelegate.m】 31行目 FirstViewController *viewController1 = [[[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil] autorelease]; viewController1.message = [NSString stringWithFormat:@"%@", @"Bood Bye!"]; 【FirstViewController.h】 @interface FirstViewController : UIViewController (削除) @property (retain, nonatomic) NSString *message; インスタンス変数の宣言も不要 39
  40. 40. Copyright (C) 2012 Groove Systems All Rights Reserved. 40 レベル24 (5分で簡易ブラウザを作ってみる) 40
  41. 41. 簡易ブラウザを作ってみる① Copyright (C) 2012 Groove Systems All Rights Reserved. 41 SecondViewController.xib 41
  42. 42. 簡易ブラウザを作ってみる② Copyright (C) 2012 Groove Systems All Rights Reserved. 42 SecondViewController.h 次のようにアウトレットを作成してください。 SecondViewController.m 次の処理を追加 プロトコルはAndroid(Java)でのListener(interface)と同様の仕組みです。 Javaの implements INTERFACE と同様の意味 通常はクラスごとにプロトコルを用意する Java の set?????Listener と同様の意味 42
  43. 43. Copyright (C) 2012 Groove Systems All Rights Reserved. 43 レベル25 (リストを作ってみる) 43
  44. 44. リストを作ってみる① Copyright (C) 2012 Groove Systems All Rights Reserved. 44 •ViewController(UIViewController)はViewを管理するクラスで、Androidでの Fragmentのようなクラス •画面に表示するViewはInterfaceBuilderで作成する以外にも、プログラム内で 動的に作成し表示することも可能(Androidと同様) •非アクティブなViewController内で表示しているViewは、メモリ不足になる (メモリワーニングが発生する)と一旦全て解放さる 試しに前の章で作 成した簡易ブラウザで試してみてください 100%ハマるところ •viewDidLoad はViewControllerの初期化を行う場所でなく、Viewが作成された 後に各Viewの初期化を行う場所、なぜならviewDidLoadは何度もコールされ るから(viewDidLoad → viewDidUnload が繰り返されます) 44
  45. 45. リストを作ってみる② Copyright (C) 2012 Groove Systems All Rights Reserved. 45 『New File...』 UITableViewControllerはUIViewControllerのサブクラスでListFragmentのようなクラス xibファイル不要 [command] + [N] 45
  46. 46. リストを作ってみる③ Copyright (C) 2012 Groove Systems All Rights Reserved. 46 リストが選択されたら詳細画面を表示する的なUIを実現したいなー AndroidだとstartActivityで画面切り替えればいいよね∼またはFragmentの貼り替えで∼ iPhoneだと.... こんなUIが一般的ですよねー そうだ、UINavigationController を使おう!! 46
  47. 47. リストを作ってみる④ Copyright (C) 2012 Groove Systems All Rights Reserved. 47 AppDelegate.m コピペできないとか...Xcodeの補完機能があれば楽勝なはずです! できたら一度実行してみてください 47
  48. 48. リストを作ってみる⑤ Copyright (C) 2012 Groove Systems All Rights Reserved. 48 ListViewController.h 48
  49. 49. リストを作ってみる⑥ Copyright (C) 2012 Groove Systems All Rights Reserved. 49 ListViewController.m 49
  50. 50. リストを作ってみる⑦ Copyright (C) 2012 Groove Systems All Rights Reserved. 50 ListViewController.m 50
  51. 51. リストを作ってみる⑧ Copyright (C) 2012 Groove Systems All Rights Reserved. 51 ListViewController.m リストではAndroidと同じ様にセルViewを 再利用する仕組みがあります。 順序があれでスミマセン 51
  52. 52. リストを作ってみる⑨ Copyright (C) 2012 Groove Systems All Rights Reserved. 52 ListViewController.m SectionとRowという二階層の仕組みになっていることもあり若干複雑だと思いますが、基 本を抑えれば大丈夫です!! 52
  53. 53. リストを作ってみる⑩ Copyright (C) 2012 Groove Systems All Rights Reserved. 53 AppDelegate.m に追加した処理の UITableViewStylePlain を UITableViewStyleGrouped に変更す ると、リストのデザインが変わります。 UITableViewCellStyleDefault を UITableViewCellStyleSubtitle に変更することで、リストのセル 内にサブタイトルを表示することも可能です。 53
  54. 54. リストを作ってみる⑪ Copyright (C) 2012 Groove Systems All Rights Reserved. 54 ViewControllerの構造 UITabBarController UINavigationController ListViewController 54
  55. 55. 捕足 Copyright (C) 2012 Groove Systems All Rights Reserved. 55 •Objective-Cには名前空間が無いためクラス名の頭二文字で表現していま す。 •ワーニングは早めに消しておきましょう。「ワーニングだからいいや」と 甘く見ていると実は深刻な不具合だったりすることが有ります。 •「Product」→「Analyze」を実行すると、メモリ管理上問題のある箇所を教 えてくれます。今回作成したプログラムで実行すると2カ所対象として抽 出されるので、デバッグしてみましょう。 •今流行りのARC(Automatic Reference Counting)を使えばretain/release/ autoreleaseが不要になります。エラーになります。ARCと非ARCは混在が可 能です。 55
  56. 56. おわり おつかれさまでした!! Copyright (C) 2012 Groove Systems All Rights Reserved. 56 56

×