Download free for 30 days
Sign in
Upload
Language (EN)
Support
Business
Mobile
Social Media
Marketing
Technology
Art & Photos
Career
Design
Education
Presentations & Public Speaking
Government & Nonprofit
Healthcare
Internet
Law
Leadership & Management
Automotive
Engineering
Software
Recruiting & HR
Retail
Sales
Services
Science
Small Business & Entrepreneurship
Food
Environment
Economy & Finance
Data & Analytics
Investor Relations
Sports
Spiritual
News & Politics
Travel
Self Improvement
Real Estate
Entertainment & Humor
Health & Medicine
Devices & Hardware
Lifestyle
Change Language
Language
English
Español
Português
Français
Deutsche
Cancel
Save
Submit search
EN
Uploaded by
hasegawa
466 views
Cocoa Pro5
Technology
◦
Business
◦
Read more
1
Save
Share
Embed
Embed presentation
Download
Download to read offline
1
/ 78
2
/ 78
3
/ 78
4
/ 78
5
/ 78
6
/ 78
7
/ 78
8
/ 78
9
/ 78
10
/ 78
11
/ 78
12
/ 78
13
/ 78
14
/ 78
15
/ 78
16
/ 78
17
/ 78
18
/ 78
19
/ 78
20
/ 78
21
/ 78
22
/ 78
23
/ 78
24
/ 78
25
/ 78
26
/ 78
27
/ 78
28
/ 78
29
/ 78
30
/ 78
31
/ 78
32
/ 78
33
/ 78
34
/ 78
35
/ 78
36
/ 78
37
/ 78
38
/ 78
39
/ 78
40
/ 78
41
/ 78
42
/ 78
43
/ 78
44
/ 78
45
/ 78
46
/ 78
47
/ 78
48
/ 78
49
/ 78
50
/ 78
51
/ 78
52
/ 78
53
/ 78
54
/ 78
55
/ 78
56
/ 78
57
/ 78
58
/ 78
59
/ 78
60
/ 78
61
/ 78
62
/ 78
63
/ 78
64
/ 78
65
/ 78
66
/ 78
67
/ 78
68
/ 78
69
/ 78
70
/ 78
71
/ 78
72
/ 78
73
/ 78
74
/ 78
75
/ 78
76
/ 78
77
/ 78
78
/ 78
More Related Content
PDF
eZ Publishのextension開発チュートリアル
by
株式会社ミツエーリンクス
PDF
Movable TypeのWebアプリケーションフレームワークの基本
by
Hajime Fujimoto
PDF
DW テンプレートをマスターして 楽々サイトメンテナンス
by
Akira Maruyama
ODP
デザインパターン(初歩的な7パターン)
by
和明 斎藤
PDF
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
by
Yujiro Araki
PDF
20120118 titanium
by
Hiroshi Oyamada
PDF
WordBeach @kurudrive
by
Hidekazu Ishikawa
PPTX
html for Kubo Semi 2014
by
Toshiki NOGUCHI
eZ Publishのextension開発チュートリアル
by
株式会社ミツエーリンクス
Movable TypeのWebアプリケーションフレームワークの基本
by
Hajime Fujimoto
DW テンプレートをマスターして 楽々サイトメンテナンス
by
Akira Maruyama
デザインパターン(初歩的な7パターン)
by
和明 斎藤
MTDDC Meetup Tokyo 2011:もっとディープにMovable Type
by
Yujiro Araki
20120118 titanium
by
Hiroshi Oyamada
WordBeach @kurudrive
by
Hidekazu Ishikawa
html for Kubo Semi 2014
by
Toshiki NOGUCHI
Viewers also liked
PDF
Cocoa Pro07
by
hasegawa
PPT
Projects Better Faster Cheaper
by
MELINDA KORENCHUK
PPT
Setup Social Media Strategy
by
MELINDA KORENCHUK
PDF
Cocoa Pro09
by
hasegawa
PPT
ola
by
guestea8057
PDF
Objc04
by
hasegawa
PDF
Cocoa Pro08
by
hasegawa
PDF
Objc05
by
hasegawa
PDF
Objc02
by
hasegawa
PDF
Objc03 2
by
hasegawa
PDF
Midterm2nd
by
hasegawa
PDF
Cocoa Pro6
by
hasegawa
PDF
Objc03 1
by
hasegawa
PDF
Pd millora les tteves fotos amb picassa
by
omnia valls
PDF
Pd com contractar el servei d'internet
by
omnia valls
ODP
Oussama
by
omnia valls
PDF
Cocoa Pro01
by
hasegawa
Cocoa Pro07
by
hasegawa
Projects Better Faster Cheaper
by
MELINDA KORENCHUK
Setup Social Media Strategy
by
MELINDA KORENCHUK
Cocoa Pro09
by
hasegawa
ola
by
guestea8057
Objc04
by
hasegawa
Cocoa Pro08
by
hasegawa
Objc05
by
hasegawa
Objc02
by
hasegawa
Objc03 2
by
hasegawa
Midterm2nd
by
hasegawa
Cocoa Pro6
by
hasegawa
Objc03 1
by
hasegawa
Pd millora les tteves fotos amb picassa
by
omnia valls
Pd com contractar el servei d'internet
by
omnia valls
Oussama
by
omnia valls
Cocoa Pro01
by
hasegawa
Similar to Cocoa Pro5
PDF
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
by
幸雄 村上
PPTX
iPhoneアプリ開発の歩き方〜Swift編〜
by
Yusuke SAITO
PDF
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
by
Masaru Gushiken
PDF
Phpではじめるオブジェクト指向(公開用)
by
VOYAGE GROUP
KEY
Ll xcode
by
Net Kanayan
PDF
エンジニア戦記 〜小さなチーム、大きな未来〜
by
Yuki Hirai
PDF
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
by
聡 中川
PPTX
2012 05-19第44回cocoa勉強会発表資料
by
OCHI Shuji
PDF
Beginning iPhone Vol2
by
Sachiko Kajishima
PDF
DDD 20121106 SEA Forum November
by
増田 亨
PDF
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
by
聡 中川
PDF
flasherがはじめてiOS開発をしてみて
by
佐藤 俊太郎
PDF
Obj c
by
SungVum Kim
KEY
1.29.user,user,user
by
Tonny Xu
PDF
I phoneアプリ入門 第4回
by
Sachiko Kajishima
PDF
DevLOVE iPhoneアプリ勉強会
by
Toshimitsu Takahashi
PDF
I phoneアプリ入門 第5回
by
Sachiko Kajishima
PDF
Storyboard
by
Hidetoshi Mori
PDF
iPhone develop for Beginner
by
Sachiko Kajishima
PDF
iPhoneアプリを作ってみよう
by
Nagao Shun
RFC Viewer開発を通して学ぶ!! iOS開発のパターン化
by
幸雄 村上
iPhoneアプリ開発の歩き方〜Swift編〜
by
Yusuke SAITO
Apple審査を一発通過!iOS開発経験0でも出来るじげん流Swift開発のすべて
by
Masaru Gushiken
Phpではじめるオブジェクト指向(公開用)
by
VOYAGE GROUP
Ll xcode
by
Net Kanayan
エンジニア戦記 〜小さなチーム、大きな未来〜
by
Yuki Hirai
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ
by
聡 中川
2012 05-19第44回cocoa勉強会発表資料
by
OCHI Shuji
Beginning iPhone Vol2
by
Sachiko Kajishima
DDD 20121106 SEA Forum November
by
増田 亨
24時間でiOSアプリ-Twitterクライアント-の作成にチャレンジ ver1.1
by
聡 中川
flasherがはじめてiOS開発をしてみて
by
佐藤 俊太郎
Obj c
by
SungVum Kim
1.29.user,user,user
by
Tonny Xu
I phoneアプリ入門 第4回
by
Sachiko Kajishima
DevLOVE iPhoneアプリ勉強会
by
Toshimitsu Takahashi
I phoneアプリ入門 第5回
by
Sachiko Kajishima
Storyboard
by
Hidetoshi Mori
iPhone develop for Beginner
by
Sachiko Kajishima
iPhoneアプリを作ってみよう
by
Nagao Shun
Recently uploaded
PDF
エンジニアが選ぶべきAIエディタ & Antigravity 活用例@ウェビナー「触ってみてどうだった?Google Antigravity 既存IDEと...
by
NorihiroSunada
PDF
流行りに乗っかるClaris FileMaker 〜AI関連機能の紹介〜 by 合同会社イボルブ
by
Evolve LLC.
PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #2
by
Tasuku Takahashi
PDF
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #1
by
Tasuku Takahashi
PPTX
楽々ナレッジベース「楽ナレ」3種比較 - Dify / AWS S3 Vector / Google File Search Tool
by
Kiyohide Yamaguchi
PDF
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup
by
Masaki Yamakawa
エンジニアが選ぶべきAIエディタ & Antigravity 活用例@ウェビナー「触ってみてどうだった?Google Antigravity 既存IDEと...
by
NorihiroSunada
流行りに乗っかるClaris FileMaker 〜AI関連機能の紹介〜 by 合同会社イボルブ
by
Evolve LLC.
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #2
by
Tasuku Takahashi
Machine Tests Benchmark Suite. Explain github.com/alexziskind1/machine_tests #1
by
Tasuku Takahashi
楽々ナレッジベース「楽ナレ」3種比較 - Dify / AWS S3 Vector / Google File Search Tool
by
Kiyohide Yamaguchi
20251210_MultiDevinForEnterprise on Devin 1st Anniv Meetup
by
Masaki Yamakawa
Cocoa Pro5
1.
第5回 iPhone輪講 Lesson10/Lesson11 乗るしかないこのビッグウエーブに
2.
Lesson10 Objective-Cの文法
3.
クラスの宣言と実装 クラスの記述は2つの部分からなる クラスの宣言 クラスがどういったインスタンス変数を持っているか,どういっ たメソッドを持っているかということを定義するする部分 クラスの実装
宣言したメソッドの定義を書く部分
4.
クラスの宣言と実装 クラスの宣言と実装のファイルにはそれぞれ拡 張子がある クラス宣言には「.h」という拡張子をつける hはヘッダ(header)の意味 クラス実装には「.m」という拡張子をつける mはメソッド(method)の意味
5.
文法実験の仕方 以前作ったObjective-Cのテストのための プロジェクトObjC Testをひらく ソースコードは3つのファイルに書かれていた
クラス宣言のためのファイルはMyObject.h クラス実装のためのファイルはMyObject.m クラスをインスタンス化してメソッドを呼び起こすのが ObjC Test.m
6.
文法実験の仕方 ObjC Test.mのソースコードを見返してみる
7.
文法実験の仕方 ObjC Test.mのソースコードを見返してみる
8.
文法実験の仕方
NSAutoreleasePoolというクラスの ObjC Test.mのソースコードを見返してみる インスタンス化を行っている
9.
文法実験の仕方 ObjC Test.mのソースコードを見返してみる
10.
文法実験の仕方 ObjC Test.mのソースコードを見返してみる
11.
文法実験の仕方 ObjC Test.mのソースコードを見返してみる
12.
文法実験の仕方 ObjC Test.mのソースコードを見返してみる
MyObjectクラスの インスタンス化をしている
13.
クラスの宣言 クラス宣言の読み込み クラスは親クラスを継承してサブクラスを作る ソースコードを読み込んで処理するのはコンパイラ コンパイラが親クラスの事を知らなくてはいけない
コンパイルするとき,親クラスの宣言を読み込んでおく
14.
フレームワークのクラス宣言の
読み込み 読み込むために使うのが「#import」という文 Cocoaのクラス宣言ファイルを読み込むには,以下のように書く これは「システムにある,Cocoaフレームワークの, Cocoa.hというファイルを読み込む」という意味 #importの後の< >が,システムのヘッダファイルを意味する
15.
フレームワークのクラス宣言の
読み込み #import <Cocoa/Cocoa.h>の指示で読み込む ファイル /システム/ライブラリ/Frameworks/Cocoa.framework/ Headers/Cocoa.h Foundation,AppKit,CoreDataというフレームワークのヘッダ ファイルを読み込んでいる
16.
自分で作ったクラス宣言の読み込み 自分で作ったクラス宣言ファイル(Tigers.h) を読む場合は以下のように書く #importの後にダブルクォーテーション(
)が来ている これはヘッダファイルがプロジェクト内部にある事を示す
17.
クラスの宣言 クラスの宣言をする まず名前を決める(今回はMyObject) 親クラスを決める 何かのクラスを拡張するときは,そのクラスを書く 何も無い場合はCocoaのルートクラスのNSObjectを使う
クラス宣言の宣言 クラス名 親クラスの名前
18.
インスタンス変数の宣言 クラスの宣言にインスタンス変数の宣言を加え る事ができる @interfaceと@endの間に「{ }」を加えて,その中に書く
19.
メソッドの宣言 引数なしのインスタンスメソッド インスタンス変数であるcountの値を取得するためのメソッドを宣 言する 文法は -
(返り値型)メソッド名;
20.
メソッドの宣言 引数1つのインスタンスメソッド countの値を設定するためのメソッド 文法は - (返り値型)メソッド名:(引数型)引数名;
21.
メソッドの宣言 引数2つ以上のインスタンスメソッド countとindexの値を同時に設定する 文法は -
(返り値型)メソッド名:(引数名)引数名 ラベル:(引数型)引数名;
22.
メソッドの宣言 クラスメソッド メソッドにはクラスメソッドもある インスタンスメソッドの宣言は「 - 」から始まっていたが, クラスメソッドの宣言は「
+ 」から始まる それ以外はインスタンスメソッドと同じ
23.
クラスの実装 クラスの実装を書いてみる クラスの実装には@implementationを使う @implementationの後ろにはクラス名が来る
24.
メソッドの実装 MyObjectにメソッドの実装を付け加える メソッドの実装は@implementationと@endの間に書く 宣言と同じ形でメソッドを書き,中括弧({ })の中にメソッドでの 処理を実装していく
25.
メソッドの宣言は常に必要か? ここまでだと「.hでメソッド宣言」→ 「.mでメソッド実装」という流れ メソッドの宣言は常に必要なのか? Objective-Cでは,メソッドの宣言をせずに,いきなり実装して も構わない
他のクラスから呼んでもらう必要の無いものは .hファイルに加えなくてよい
26.
オブジェクトのための変数型 Objective-CはC言語ベースなので, 基本的な変数の型はC言語と同じ char,int,floatといった型はそのまま使える それらに加えて,Objective-Cのための変数も追加されている それがオブジェクトのための変数型
27.
インスタンスオブジェクトのための
変数型 インスタンスオブジェクトのための変数 クラスをインスタンス化するとオブジェクトができる このオブジェクトに入れるための変数
28.
インスタンスオブジェクトのための
変数型 変数は「クラス名のポインタ」という 形式の型になる MyObjectクラスのインスタンスのための変数 CocoaのクラスであるNSStringのための変数
29.
id型 オブジェクトの変数のための型にはid型という 特殊なものが用意されている id型はすべてのオブジェクトのために使える型 CocoaのすべてのクラスはNSObjectから継承されている このNSObjectにはObjective-Cのすべてのオブジェクトに共通 するデータが含まれている
これを表すための変数型がid型
30.
id型 すべてのオブジェクトはid型の変数に代入する ことができる それだと,その変数が何のクラスだったのかわかりにくい それを避けたいときはクラス名のポインタ型を使うことになる
31.
id型 以前作ったHello Worldアプリケーションの AppController.hを開く クラスの宣言でid型が使われていた
何のクラスかわかりやすく書き換える
32.
nil値 C言語ではポインタが何も指してない状態を 表すためにNULLという値があった Objective-Cにもオブジェクトのための変数が,何のオブジェクト も指し示していないことを表すnilという値がある これでstringという変数は何も指し示していない という事が保証される
33.
メソッドの呼び出し インスタンスメソッドの呼び出し MyObjectクラスにcountというクラスを実装した これを呼び出してみる
インスタンスメソッドを呼び出すには,あらかじめ インスタンス化しておかなければならない →Lesson12
34.
メソッドの呼び出し インスタンスメソッドの呼び出し インスタンス化されたオブジェクトに対して,メソッドを呼び出し ているのが「count = [object
count];」 文法は 返り値 = [インスタンス メソッド名]; メソッドは関数と同じように返り値を返す. 角括弧の中にインスタンスオブジェクト,空白をあけてメソッド 名を書く これがメソッドの呼び出し
35.
クラスメソッドの呼び出し クラスメソッドの呼び出し 文法自体はインスタンスメソッドのものと変わらない 違いは呼び出しの対象となるオブジェクト インスタンスメソッドのときは,インスタンス化したオブジェク トを使った
クラスメソッドは,クラス全体に対して呼び出す 呼び出す対象のところにクラス名を指定する
36.
オブジェクトがnilの場合 インスタンスメソッドの呼び出しのとき, インスタンスのオブジェクトのための変数を 使っていた 普通にインスタンス化されたオブジェクトを指していれば問題無し nilが入っていた場合どうなるか nilに対してメソッドを呼び出すと,その呼び出しは無視される 返り値は型に関わらず0が返ってくる
37.
Lesson11 チュートリアル: RSSリーダ
38.
開発の手順 1. 新規プロジェクトの作成をする
Cocoa Applicationテンプレートを使う 2. アプリケーションのためのクラスを作成をする MVCアーキテクチャに則って,コントローラを1つ作る アウトレットとアクションも追加しておく
39.
開発の手順 3. Interface Builderでユーザインタフェースの
デザインをする インタフェースの部品に様々な設定を施す 4. アウトレットとアクションを接続する アウトレットはコントロールクラスから,アクションはボタンと テキストフィールドから接続する テーブルビューでは特殊な設定が必要となる
40.
開発の手順 5. ソースコードを書く 6. ビルドしてから実行する
41.
プロジェクトの作成 プロジェクトを作成する [ファイル]→[新規プロジェクト...]メニューを開く 「Cocoa Application」を選択する プロジェクト名は「RSS Reader」にして適当な場所に保存
42.
プロジェクトの作成 ガベージコレクションの設定 プロジェクトウィンドウのターゲットの項目を開く 「RSS Reader」という名前のターゲットがあるので ダブルクリック 「ターゲット
RSS Reader の情報」という ウィンドウが開く
43.
プロジェクトの作成 ガベージコレクションの設定 「ターゲット RSS
Reader の情 報」のウィンドウにはタブがあるの で「ビルド」のタブを選択 ビルドの設定を行う画面になる 構成のメニューは「すべての 構成」,表示のメニューは 「すべての設定」にしておく
44.
プロジェクトの作成 ガベージコレクションの設定 「GCC 4.0 -
Code Generation」のカ テゴリの中にある「Objective-C Garbage Collection」の設定を変更する ガーベッジコレクションの設定では 「Unsupported」「Supported」 「Required」という値を指定できる ここでは「Required」を指定する
45.
クラスの作成 クラスを作成する アプリケーションのためのコントローラクラスを作る [ファイル]→[新規ファイル...]メニューを選択する テンプレート一覧から「Objective-C
class」を選択する ファイル名を「AppController」とする
46.
クラスの作成 AppController.hを編集する
47.
ユーザインタフェースのデザイン 部品の配置 プロジェクトウィンドウでMainMenu.xibを開く Interface Builderが起動するのでそちらで作業する アプリケーションのメインウィンドウが開いているので,その上に 部品を配置していく
48.
ユーザインタフェースのデザイン 部品の配置 今回使う部品は4種類 1.編集可能なテキストフィールド
2.編集不可能なテキストフィールド 3.ボタン 4.テーブルビュー
49.
ユーザインタフェースのデザイン 部品の配置 部品はライブラリの[Cocoa]→[Views&Cells]の下にある テキストフィールドは[Inputs&Values] ボタンは[Buttons]
テーブルビューは[Data Views]
50.
ユーザインタフェースのデザイン ユーザインタフェースをデザインする ウィンドウ上に部品を配置していく(全部で8ヶ所)
① ② ③ ① ① ④ ⑤ ⑥ ⑦ ⑧
51.
ユーザインタフェースのデザイン テキストフィールドの設定 編集可能なテキストフィールドを選択する インスペクタパネルのAttributesタブの「Action」と 書かれているポップアップメニューから「Set
On Enter Only」 を選択する Enterキーを押したときにだけアクションが送られるように なる
52.
ユーザインタフェースのデザイン テキストフィールドの設定 編集可能なテキストフィールドを選択する インスペクタパネルのAttributesタブの「Action」と 書かれているポップアップメニューから「Set
On Enter Only」 を選択する Enterキーを押したときにだけアクションが送られるように なる
53.
ユーザインタフェースのデザイン テキストフィールドの設定 編集可能なテキストフィールドを選択する インスペクタパネルのAttributesタブの「Action」と 書かれているポップアップメニューから「Set
On Enter Only」 を選択する Enterキーを押したときにだけアクションが送られるように なる
54.
ユーザインタフェースのデザイン テーブルビューの設定 テーブルビューをクリックする インスペクタのタイトルバーに「Scroll View」と表示されていれ ば,テーブルビューの外側に位置するスクロールビューを選択して いることになる
55.
ユーザインタフェースのデザイン テーブルビューの設定 スクロールビューが選択されている状態で 設定を行う 横スクロールバーを表示しないようにする インスペクタのAttributesタブにある 「Show
Horizontal Scroller」の チェックを外す
56.
ユーザインタフェースのデザイン テーブルビューの設定 Scroll Viewの状態でテーブルをもう一度クリックする インスペクタのタイトルが「Table
View」になる スクロールビュー内部のテーブルビューが選択できている事 を示している
57.
ユーザインタフェースのデザイン テーブルビューの設定 「Col. Sizing」という ポップアップメニューから 「Uniform」を選択する これでテーブルビューの
大きさを変更したとき, 列サイズも均等に 変わる事になる
58.
ユーザインタフェースのデザイン テーブルビューの設定 テーブルのヘッダ部分をクリックする タイトルが「Table Header
View」となる さらにクリックして,ヘッダのみが白く強調され 他がグレーアウトになるようにする この状態で列の境目をドラッグして,列の大きさが調整できる
59.
ユーザインタフェースのデザイン テーブルビューの設定 ヘッダをダブルクリックする事で 列にタイトルを設定できる 左側に「Title」右側に「Link」を入力する
60.
ユーザインタフェースのデザイン テーブルビューの設定 列の識別子を設定する 「Table Column」と呼ばれる項目を選択する必要がある
再び「Table View」を選択した状態にする この状態でテーブルビューの左側の領域をクリック 左側だけが強調されて,インスペクタのタイトルが 「Table Column」となる
61.
ユーザインタフェースのデザイン テーブルビューの設定 識別子の設定をする インスペクタに「Identifier」 という項目がある
Title列は「title」,Link列 には「link」と入力する 「Editable」のチェックを それぞれ外す
62.
自動リサイズの設定 自動リサイズの設定をする URLテキストフィールドの設定をおこなう 「URL:」と書いてあるテキストフィールドを選択して インスペクタのSizeタブも表示する
このテキストフィールドは左上に固定する Autosizingの設定で外側の左と上の設定をする
63.
自動リサイズの設定 同様にすべての部品を設定する 「Title:」,「Link:」のテキストフィールドは左上固定 編集可能なテキストフィールド,「title」,「link」のテキスト フィールドは上に固定で横方向にはリサイズ 「Read」ボタンは右上固定 テーブルビューはスクロールビューの中に入れられている リサイズの設定は外側のスクロールビューに対しておこなう
64.
自動リサイズの設定
65.
ウィンドウの設定 ウィンドウのタイトルを設定する ウィンドウを選択して,インスペクタのAttributesのタブを 表示する 「Title」というテキストフィールドに,「RSS Reader」と 入力する
66.
クラスのインスタンス化 クラスをインスタンス化する ライブラリの[Cocoa] > [Objects&Controller]
> [Controllers] にあるObjectをxibウィンドウにドラッグして追加 オブジェクトを選択したままインスペクタを表示し, Identityタブで「AppController」クラスを選択する
67.
アウトレットとアクションの
接続 テキストフィールドの titleTextField アウトレットを接続す urlTextField linkTextField る 「urlTextField」, 「titleTextField」, 「linkTextField」を コントロールキーを押しな がらそれぞれ接続する
68.
アウトレットとアクションの
接続 アクションの接続をする 「Read」ボタンから, 「readURL;」アクションに接続 する 入力可能なテキストフィールドか らも「readURL ;」アクションに 接続する readURL; readURL; このアクションはテキスト フィールドで Enterキーを 押したときに送られる
69.
アウトレットとアクションの
接続 テーブルビューのアウト レットを接続する コントロールをしながらテーブル ビューをクリック し,AppControllerまでドラッグ して,上でドロップする dataSource テーブルビューアウトレットの中 から「dataSource」を選択
70.
AppControllerクラスの実装 AppController.mを編集する ソースコードの内容は次のスライドから…
71.
#import "AppController.h" @implementation AppController -
(IBAction)readURL:(id)sender { NSURL* url; url = [NSURL URLWithString:[urlTextField stringValue]]; // XMLドキュメントを作成します document = [[NSXMLDocument alloc] initWithContentsOfURL:url options:0 error:NULL]; if (!document) { return; } // '/rss/channle/title'のノードを取得します NSArray* nodes; nodes = [document nodesForXPath:@"/rss/channel/title" error:NULL]; if ([nodes count] == 0) { // '/rdf:RDF/channel/title'のノードを取得します nodes = [document nodesForXPath:@"/rdf:RDF/channel/title" error:NULL]; } if ([nodes count] == 0) { // '/feed/title'のノードを取得します nodes = [document nodesForXPath:@"/feed/title" error:NULL]; }
72.
if ([nodes count]
== 1) { NSXMLNode* titleNode; titleNode = [nodes objectAtIndex:0]; // テキストフィールドにタイトルを設定します NSString* title; title = [titleNode stringValue]; [titleTextField setStringValue:title]; } // '/rss/channle/link'のノードを取得します nodes = [document nodesForXPath:@"/rss/channel/link" error:NULL]; if ([nodes count] == 0) { // '/rdf:RDF/channel/link'のノードを取得します nodes = [document nodesForXPath:@"/rdf:RDF/channel/link" error:NULL]; } if ([nodes count] == 0) { // '/feed/link'のノードを取得します nodes = [document nodesForXPath:@"/feed/link" error:NULL]; }
73.
if ([nodes count]
== 1) { NSXMLNode* linkNode; linkNode = [nodes objectAtIndex:0]; // テキストフィールドにリンクを設定します NSString* link; link = [linkNode stringValue]; [linkTextField setStringValue:link]; } // テーブルビューにデータを読み込みます [tableView reloadData]; } // NSTableViewデータソース - (int)numberOfRowsInTableView:(NSTableView*)tableView { if (!document) { return 0; }
74.
// '/rss/channel/item/'のノードを取得します
NSArray* nodes; nodes = [document nodesForXPath:@"/rss/channel/item" error:NULL]; if ([nodes count] == 0) { // '/rdf:RDF/item'のノードを取得します nodes = [document nodesForXPath:@"/rdf:RDF/item" error:NULL]; } if ([nodes count] == 0) { // '/feed/entry'のノードを取得します nodes = [document nodesForXPath:@"/feed/entry" error:NULL]; } // ノードの数を返します return [nodes count]; }
75.
// NSTableViewデータソース - (id)tableView:(NSTableView*)tableView
objectValueForTableColumn: (NSTableColumn*)tableColumn row:(int)row { if (!document) { return nil; } // テーブルカラムの識別子を取得します id identifier; identifier = [tableColumn identifier]; // '/rss/channel/item/'のノードを取得します NSArray* nodes; nodes = [document nodesForXPath:@"/rss/channel/item" error:NULL]; if ([nodes count] == 0) { // '/rdf:RDF/item'のノードを取得します nodes = [document nodesForXPath:@"/rdf:RDF/item" error:NULL]; } if ([nodes count] == 0) { // '/feed/entry'のノードを取得します nodes = [document nodesForXPath:@"/feed/entry" error:NULL]; }
76.
// 指定された行の、ノードを取得します
NSXMLNode* node; node = [nodes objectAtIndex:row]; if ([identifier isEqual:@"title"]) { // 'title'の文字列を取得します nodes = [node nodesForXPath:@"title" error:NULL]; if ([nodes count] == 1) { node = [nodes objectAtIndex:0]; return [node stringValue]; } } if ([identifier isEqual:@"link"]) { // 'link'の文字列を取得します nodes = [node nodesForXPath:@"link" error:NULL]; if ([nodes count] == 1) { node = [nodes objectAtIndex:0]; return [node stringValue]; } } return nil; } @end
77.
ビルドと実行 ビルドして実行する [ビルド]→[ビルドと実行]メニューを選択 する RSS Readerのアプリケーションが
起動する
78.
おわり
Download