第6回 iPhone勉強会113年5月25日土曜日
・第7回 MapKitを使った地図の表示方法ブラウザでGoogleMapを表示する今後の予定213年5月25日土曜日iPhone勉強会も残す所あと2回となりました。(予定ですが)少しは楽しくなってきたのであればとてもうれしいです。
・前回の復習(UITableView)・UITableView続き(データの追加と削除)・データの保持・現在地の取得方法・MapKitの使用方法・実機転送方法今日のアジェンダ313年5月25日土曜日今日のスケジュールは以下の通りです。前回の復習...
前回の復習4TODO名にはNSString型を使い、期日にはNSDate型を使いましょう。([NSDate date]で現在時刻がとれます13年5月25日土曜日それでは前回の復習です。この画面のように、TODOListを表示するアプリを作成しま...
NSDictionary5復習で作成するアプリでは複数のデータを保持します。データの数分配列を作ると管理がしにくいです。NSDictionaryを使用し、NSDictionaryを配列にします。NSDictionaryはJavaでいうHashM...
NSDictionary6初期化(alloc initでもよい)dictionary:空のDictionaryを作るデータの参照objectForKey: (id)keyキーに(key)該当するデータを取得するデータの設定(NSMutableD...
UITableView(続き)7地図へ行く前に・・・もう少しUITableViewの続きを勉強しますこれで履歴画面や設定画面が作れるようになります13年5月25日土曜日早く地図の勉強をしたい所ですが、地図情報を取得する勉強の前に、少しだけテーブ...
UITableView(続き)8∼データの編集を行う為にやること∼•UITableViewを編集可能にする•追加ボタン/削除ボタンが押されたときや行が入れ替えられたときの動作を実装13年5月25日土曜日地図情報を取得する勉強の前に、少しだけテー...
編集モードを変更するには9のですが、ここでは手っ取り早い方法をとります。UITableViewControllerのeditButtonItem(編集ボタン)をNavigationBarの右側に配置すればOKコードはこんな感じ。ViewCont...
このようになりましたか?10ボタンを押すことにより編集モードが変わる13年5月25日土曜日実装できましたか?TableViewを表示しているViewControllerのviewDidLoadに 以下のコードを追加してみましょう。self.na...
UINavigationBarって?11画面の上にあるこの部分のこと。配置されているボタンのことをUINavigationButtonItemという。13年5月25日土曜日ここで、NavigationBarって何ものかということについて説明しま...
UINavigationController12画面遷移のためのViewControllerをスタックするもの(これがあるから前のViewに戻れる)segueをpushに設定する=ViewControllerをスタック13年5月25日土曜日ここ...
行の削除を行う13削除(挿入)が実行されると・・・削除または挿入によって引数のeditingStyleが変わる•UITableViewCellEditingStyleDelete→削除•UITableViewCellEditingStyleIn...
データの削除を行うには14元になるデータの削除→NSMutableArrayのremoveObjectAtIndexを使うテーブルからデータの削除→UITableViewのdeleteRowsAtIndexPathsを使う順番を逆にするとアプリ...
行の入れ替えを行うには15•UITableViewを行入れ替え可能にする→canMoveRowAtIndexPathでYESをリターンする•行が入れ替えられたときの動作を実装→moveRowAtIndexPathメソッドが呼ばれるNSMutab...
このようになりましたか?1613年5月25日土曜日では、今のことをふまえて実装をしてみましょう。実装した結果、右端に「Edit」というボタンが表示され、ボタンを押すと右の図のようになってデータの削除と入れ替えが出来るようになっているでしょうか。
データの追加を行う17データの追加を行う前に・・・詳細画面をこんな風に変更しましょうEditボタンが押されたら編集画面へ遷移する13年5月25日土曜日では、今のことをふまえて実装をしてみましょう。実装した結果、右端に「Edit」というボタンが表...
StoryBoardの変更18詳細画面は読み取り専用にし、editボタンが押されたら編集画面へ遷移①②Backボタンはつけない13年5月25日土曜日まず、StoryBoardの変更を行います。新しくViewControllerを追加し、TODO...
ソースコードの変更19•編集画面用のViewControllerを作成•詳細画面のViewControllerを変更13年5月25日土曜日それではソースコードの変更を行います。やることは大きく2つあります。編集画面用のViewControlle...
20•saveボタンが押されたときの処理→シングルトンで持っているデータを変更し、画面を閉じる編集画面用ViewController•cancelボタンが押されたときの処理→画面を閉じる画面を閉じるにはdismissViewController...
追加画面を実装21+ボタンが押されたら編集画面へ遷移するプラスボタンが押された場合も編集画面に遷移するようにしましょう13年5月25日土曜日では、プラスボタンが押された場合も編集画面に遷移するようにしましょう。StoryBoardを変更し、プラ...
ソースコードの変更22•リスト画面用ViewControllerの変更prepareForSegueメソッドを変更し、詳細画面に遷移する場合と編集画面に遷移する場合で処理を分ける処理を分けるにはsegue.identifierの値で区別するつまり...
prepareForSegue内の処理23•識別子の文字列比較文字列の比較はisEqualToStringメソッドを使う•編集画面の場合の処理遷移先はUINavigationControllerなので、UINavigationControlle...
編集用ViewController24•saveボタンが押されたときの処理追加の場合はNSMutableArrayのaddObjectメソッドでデータを追加•画面が表示されたときの処理追加の場合はデフォルト値を表示13年5月25日土曜日編集用V...
25•TextFieldからLabel へ変更詳細画面用ViewController•日付を文字列に変換NSDateFormatterというクラスを使ってNSDate型オブジェクトから文字列を取得する•prepareForSegueの実装何行目...
このようになりましたか?2613年5月25日土曜日今のをふまえて実装してみましょう。このようにデータの追加が出来るようになったでしょうか。
データの保持27ここではNSUserDefaultを使いましょう•変更したデータを端末に保持するにはいくつか方法があるCoreData,SQLite,UserDefaultなど・・・13年5月25日土曜日今までの方法ではアプリを落としたらデータ...
NSUserDefault28• UserDefaultの取得:standardUserDefaults• データの設定:setObject forKey• データの保存:synchronize• データの取得:arrayForKey (XXF...
位置情報の取得29位置情報に必要なものといえば・・・緯度と経度緯度と経度を取得するにはCoreLocataionFrameworkを使用する13年5月25日土曜日では、これから位置情報の取得方法について説明します。位置情報に必要なものは何でしょ...
位置情報の取得30位置を取得するのはCoreLocationManager現在地更新開始startLocationUpdateメソッド現在地取得完了(delegateメソッド)didUpdateLocationsメソッドdidUpdateToL...
位置情報の取得フロー31startLocationUpdatedidUpdateLocationsstopLocationUpdateアプリ内でメソッド実行位置が更新されたという通知13年5月25日土曜日アプリ内でstartLocationUp...
このようなアプリを作ります32新しいプロジェクトを作成して緯度と経度を表示するアプリを作りますボタンを押したら位置情報取得開始13年5月25日土曜日では、新しいプロジェクトを作成して、緯度と経度を表示するアプリを作ってみましょう。ボタンを押した...
シミュレータでの一更新33シミュレータのデバッグ→位置→位置情報をカスタマイズで緯度経度を変更可能13年5月25日土曜日シミュレータでも現在地の更新は可能です。シミュレータのメニューから位置情報をカスタマイズという画面を表示し、緯度、経度を変更...
地図を表示する34地図を表示するにはMapKitFrameworkを使いますMKMapViewで地図を表示する13年5月25日土曜日では今度は地図を表示してみましょう。地図を表示するには、MapKitFrameworkが必要なので、XCodeに...
地図を表示する35地図の表示には以下のメソッドを使用する※位置情報が更新された時に実行しますsetCenterCoordinateメソッド中心の緯度経度を設定するsetRegionメソッド表示範囲を設定する※MKCoordinateRegion...
このようになったでしょうか3613年5月25日土曜日このように現在地に地図の中心を合わせることが出来るようになったでしょうか。
ご清聴ありがとうございました3713年5月25日土曜日
Upcoming SlideShare
Loading in …5
×

I phoneアプリ入門 第6回

1,252
-1

Published on

iPhone勉強会で使用した資料です。

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,252
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
6
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

I phoneアプリ入門 第6回

  1. 1. 第6回 iPhone勉強会113年5月25日土曜日
  2. 2. ・第7回 MapKitを使った地図の表示方法ブラウザでGoogleMapを表示する今後の予定213年5月25日土曜日iPhone勉強会も残す所あと2回となりました。(予定ですが)少しは楽しくなってきたのであればとてもうれしいです。
  3. 3. ・前回の復習(UITableView)・UITableView続き(データの追加と削除)・データの保持・現在地の取得方法・MapKitの使用方法・実機転送方法今日のアジェンダ313年5月25日土曜日今日のスケジュールは以下の通りです。前回の復習を行った後、UITableViewの続きを行います。地図フレームワークMapKitの使用方法について説明していきます。今日の目標は実機にアプリを流し込んで、現在地を取得して地図を表示することです。もしかしたら、UITableViewの続きで終わってしまうかも・・・。よろしくおねがいいたします。
  4. 4. 前回の復習4TODO名にはNSString型を使い、期日にはNSDate型を使いましょう。([NSDate date]で現在時刻がとれます13年5月25日土曜日それでは前回の復習です。この画面のように、TODOListを表示するアプリを作成しましょう。初期化のときに表示するTODOを設定してください。詳細画面で行った編集が反映されるようにしましょう。DO名にはNSString型を使い、期日にはNSDate型を使いましょう。([NSDate date]で現在時刻がとれます
  5. 5. NSDictionary5復習で作成するアプリでは複数のデータを保持します。データの数分配列を作ると管理がしにくいです。NSDictionaryを使用し、NSDictionaryを配列にします。NSDictionaryはJavaでいうHashMapのようなものです。キーに対応する値が格納されています。todoName iOS勉強Valuekey13年5月25日土曜日復習編で作成するアプリでは、TODO名と日付という複数のデータを格納することに気づいたでしょうか。それぞれNSArrayを作成しても良いのですが、データの種類が多くなると管理もしにくいです。そこで、NSDictaionaryを使用して、NSDictionaryをNSArrayに設定するようにしましょう。
  6. 6. NSDictionary6初期化(alloc initでもよい)dictionary:空のDictionaryを作るデータの参照objectForKey: (id)keyキーに(key)該当するデータを取得するデータの設定(NSMutableDictionary)setObject :(id)object forKey:(id)key引数keyをキーobjectを該当オブジェクトとするエントリを追加する13年5月25日土曜日NSDictionaryにはいろいろなメソッドがありますが、主なものを紹介します初期化メソッドNSDictionary *dict = [[NSDictionary alloc] init];NSDictionary *dict = [NSDictionary dictionary];データの参照NSString *toDo = (NSString*)[dict objectForKey:@”todoName”];データの設定(NSMutableDictionaryを使う)[dict setObject:toDo forKey:@”todoName”];
  7. 7. UITableView(続き)7地図へ行く前に・・・もう少しUITableViewの続きを勉強しますこれで履歴画面や設定画面が作れるようになります13年5月25日土曜日早く地図の勉強をしたい所ですが、地図情報を取得する勉強の前に、少しだけテーブルビューの続きを行います。これで履歴画面や設定画面を作れるようになるので、より便利なアプリが作れるようになるかと思います。
  8. 8. UITableView(続き)8∼データの編集を行う為にやること∼•UITableViewを編集可能にする•追加ボタン/削除ボタンが押されたときや行が入れ替えられたときの動作を実装13年5月25日土曜日地図情報を取得する勉強の前に、少しだけテーブルビューの続きを行います。前回までの勉強でUITableViewでテーブルの内容を表示し、中身を更新することが出来るようになりました。ただ、新しい行を追加したり、今までのデータを削除したりしたい。ですよね・・・。UITableViewには行の追加や削除、順番の入れ替えを行うことが出来ますが、やることが二つあります。一つ目はUITableViewを編集可能にすることが必要です。もう一つは追加、削除ボタンが押されたときや行が入れ替えられたときの動作を実装する必要です。
  9. 9. 編集モードを変更するには9のですが、ここでは手っ取り早い方法をとります。UITableViewControllerのeditButtonItem(編集ボタン)をNavigationBarの右側に配置すればOKコードはこんな感じ。ViewControllerの初期処理で実装してみてください。(どこに書けば良いのかは考えてみましょう)self.navigationItem.rightBarButtonItem = self.editButtonItem;UITableViewのsetEditingメソッドを使う13年5月25日土曜日まず、UITableViewの編集モードを変更しましょう。UITableViewのsetEditingメソッドを実装すると編集モードの変更が出来ますが、UITableViewControllerには便利なものがありますので、紹介します。UITableViewControllerにはeditButtonItemを押すことで編集モードに切り替えるボタンが実装されています。なので、そのeditButtonItemをNavigationBarに配置すればよいのです。editButtonItemを押すことでUITableViewControlleのeditingという値が変更されます。
  10. 10. このようになりましたか?10ボタンを押すことにより編集モードが変わる13年5月25日土曜日実装できましたか?TableViewを表示しているViewControllerのviewDidLoadに 以下のコードを追加してみましょう。self.navigationItem.rightBarButtonItem = self.editButtonItem;右上にボタンが表示されるはずです。Editボタンを押すと表示が変わると思います。実行してみましょう。ボタンを押すことにより、編集モードが変更されているのです。
  11. 11. UINavigationBarって?11画面の上にあるこの部分のこと。配置されているボタンのことをUINavigationButtonItemという。13年5月25日土曜日ここで、NavigationBarって何ものかということについて説明します。UINavigationBarは画面の上部分にあります。NavigationBarには左右のボタンがあらかじめ配置されており、設定によって表示/非表示を変更することが出来ます。self.navigationItem.rightBarButtonItem = self.editButtonItem;とは「右側のボタンを編集ボタンにします。」ということだったのです。
  12. 12. UINavigationController12画面遷移のためのViewControllerをスタックするもの(これがあるから前のViewに戻れる)segueをpushに設定する=ViewControllerをスタック13年5月25日土曜日ここで、UINavigationControllerについて少し説明しておきます。UINavigationControllerは画面遷移のために、ViewControllerをためておく(スタックしておく)ものです。そうすることによって、前に表示した画面に戻ることが出来るのです。StotyBoardでsegueをpushに設定するということは、ViewControllerをスタックしているということなのです。storyBoardでsegueをpushに設定した場合、UINavigationControllerが無い状態(embed inしていない状態)だとエラーになって落ちてしまう理由が何となくわかるでしょうか。
  13. 13. 行の削除を行う13削除(挿入)が実行されると・・・削除または挿入によって引数のeditingStyleが変わる•UITableViewCellEditingStyleDelete→削除•UITableViewCellEditingStyleInsert→挿入commitEditingStyleメソッドが呼ばれる13年5月25日土曜日ではボタンが出来たので、削除処理を実装してみましょう。削除または挿入ボタンを押されるとcommitEditingStyleメソッドが呼ばれます。削除か挿入かの区別は引数のeditingStyleで出来ます。削除の場合、editingStyleがUITableViewCellEditingStyleDeleteとなり、挿入の場合はeditingStyleがUITableViewCellEditingStyleInsertとなります。新規追加は別の画面で行いますので、ここでは削除のみ実装します。
  14. 14. データの削除を行うには14元になるデータの削除→NSMutableArrayのremoveObjectAtIndexを使うテーブルからデータの削除→UITableViewのdeleteRowsAtIndexPathsを使う順番を逆にするとアプリが落ちるので、要注意13年5月25日土曜日データの削除を行うにはやることが2つあります。まず、元になるデータの削除を行います。ここでは、シングルトンで持っているNSMutableArrayから該当のデータを削除します。データの削除にはremoveObjectAtIndexメソッドを使いましょう。次に、テーブルからデータの削除を行います。テーブルからデータを削除するには、UITableViewのdeleteRowsAtIndexPathsを使います。削除対象のデータをNSArrayに設定します。このような記述を行うとTableViewからデータが削除されます。[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]withRowAnimation:UITableViewRowAnimationFade];ここで注意しなくてなはならないのは「元になるデータを先に削除する」ということです。deleteRowsAtIndexPathsを呼ぶと、すぐにUITableViewがリロードされるからです。先に削除しておかないと、元になるデータと行数が合わずにアプリが落ちてしまいます。
  15. 15. 行の入れ替えを行うには15•UITableViewを行入れ替え可能にする→canMoveRowAtIndexPathでYESをリターンする•行が入れ替えられたときの動作を実装→moveRowAtIndexPathメソッドが呼ばれるNSMutableArrayのexchangeObjectAtIndexメソッドで元となるデータの入れ替えを行う13年5月25日土曜日行の入れ替えを行うには2つやることがあります。まず、UITableViewを行入れ替え可能にします。UITableViewが行の入れ替えを可能にしているかというのはcanMoveRowAtIndexPathで返却する値によって決まります。つまり、canMoveRowAtIndexPathで返却する値がYESであれば入れ替えが可能ですし、NOであれば入れ替えが不可能になります。ここでは編集モードがONのときだけ入れ替えが実行できるようにしましょうcanMoveRowAtIndexPathメソッドのリターン値をself.editingを返却してあげればいいのです。
  16. 16. このようになりましたか?1613年5月25日土曜日では、今のことをふまえて実装をしてみましょう。実装した結果、右端に「Edit」というボタンが表示され、ボタンを押すと右の図のようになってデータの削除と入れ替えが出来るようになっているでしょうか。
  17. 17. データの追加を行う17データの追加を行う前に・・・詳細画面をこんな風に変更しましょうEditボタンが押されたら編集画面へ遷移する13年5月25日土曜日では、今のことをふまえて実装をしてみましょう。実装した結果、右端に「Edit」というボタンが表示され、ボタンを押すと右の図のようになってデータの削除と入れ替えが出来るようになっているでしょうか。
  18. 18. StoryBoardの変更18詳細画面は読み取り専用にし、editボタンが押されたら編集画面へ遷移①②Backボタンはつけない13年5月25日土曜日まず、StoryBoardの変更を行います。新しくViewControllerを追加し、TODO名と期日を表示できるようにしましょう。①と書いてある箇所を参考にしてみてください。今まで詳細画面として使っていた画面は「編集画面」として使います。①の画面のNavigationbarに「edit」というボタンを追加し、ボタンを押したら編集画面に遷移できるようにします。ちなみに、バックボタンは表示しないようにしてください。②の画面を選択して Editor→Embed in→NavigationControllerを選択しておきましょう。こうすることでNavigationBarにボタンを配置することが出来ます。Cancel とSaveを配置しておきましょう。
  19. 19. ソースコードの変更19•編集画面用のViewControllerを作成•詳細画面のViewControllerを変更13年5月25日土曜日それではソースコードの変更を行います。やることは大きく2つあります。編集画面用のViewControllerを作成詳細画面用のViewControllerを変更
  20. 20. 20•saveボタンが押されたときの処理→シングルトンで持っているデータを変更し、画面を閉じる編集画面用ViewController•cancelボタンが押されたときの処理→画面を閉じる画面を閉じるにはdismissViewControllerメソッドをつかう13年5月25日土曜日編集画面用のViewControllerを作成します。基本的には今まで使用していた詳細画面の処理と同じものを使用したうえで、saveボタンが押されたときとcancelボタンが押されたときの処理を追加します。saveボタンが押されたときにはSingletonで持っているデータを変更し、その上で画面を閉じます。画面を閉じるときはdismissViewControllerAnimatedメソッドを使いましょう。では、実装してみてください。
  21. 21. 追加画面を実装21+ボタンが押されたら編集画面へ遷移するプラスボタンが押された場合も編集画面に遷移するようにしましょう13年5月25日土曜日では、プラスボタンが押された場合も編集画面に遷移するようにしましょう。StoryBoardを変更し、プラスボタンが押されたときに編集画面に遷移するようにしてみてください。この場合も戻るボタンはありません。
  22. 22. ソースコードの変更22•リスト画面用ViewControllerの変更prepareForSegueメソッドを変更し、詳細画面に遷移する場合と編集画面に遷移する場合で処理を分ける処理を分けるにはsegue.identifierの値で区別するつまり、StoryBoardの変更も必要13年5月25日土曜日それではソースコードの変更を行います。まず、リスト画面用のViewControllerを変更します。いままでは一つの画面にしか遷移をしなかったのですが、今回は詳細画面に遷移する場合と編集画面に遷移する場合があるので、処理を分けます。処理を分けるにはsegueに識別子をつけて区別するようにします。ということは、StoryBoardの変更も必要になりますsegueの部分を選択し、識別子をつけましょう。詳細画面を表示する場合と編集画面を表示する場合の両方に識別子を入れます。
  23. 23. prepareForSegue内の処理23•識別子の文字列比較文字列の比較はisEqualToStringメソッドを使う•編集画面の場合の処理遷移先はUINavigationControllerなので、UINavigationControllerのtopViewControllerから編集画面用ViewControllerを取得し、行番号の設定を行う(追加とわかるような行番号にする)13年5月25日土曜日prepareForSegue内の処理について説明します。まずは判定のために識別子の文字列比較を行います。文字列の比較はNSStringのisEqualToStringメソッドを使用します。詳細画面の場合は、いままでと同じ処理なのですが、編集画面の場合は同じようには出来ません。StoryBoardを見てもわかるようにUINavigationControllerを挟んでいるので、 segue.destinationViewController にはUINavigationControllerが入っているのです。UINavigationControllerのスタックの一番上にあるViewControllerを取得すれば良いのです。(1つしかないので一番上なのは当然です)編集画面へ遷移するときはデータの追加なので、indexには追加とわかるような番号にしましょう(ということは負の値にすれば良いのです)コードはこのようになります。if ([segue.identifier isEqualToString:@"DetailViewController"]) { //詳細画面用の処理}else if([segue.identifier isEqualToString:@"EditViewController"]) {UINavigationController *navigationController = (UINavigationController *)segue.destinationViewController;EditViewController *editViewController = (EditViewController *)navigationController.topViewController;editViewController.selectedIndex = kDefaultSelectedIndex;}
  24. 24. 編集用ViewController24•saveボタンが押されたときの処理追加の場合はNSMutableArrayのaddObjectメソッドでデータを追加•画面が表示されたときの処理追加の場合はデフォルト値を表示13年5月25日土曜日編集用ViewControllerの変更をします。まず、画面が表示されたときの処理を実装します。何行目の値か保持しているかと思いますので、保持している値がデフォルト値だったらデータの追加とみなし、デフォルト値を表示するようにします。このような処理になります。if(self.selectedIndex == kDefaultSelectedIndex) {// データを新規作成_cachedData = [[NSMutableDictionary alloc]init];// デフォルトのデータを作成する[_cachedData setObject:@"TODO" forKey:kDataKeyToDoName];[_cachedData setObject:[NSDate date] forKey:kDataKeyToDoDate];} else {// ToDoの詳細を取得するDataManager *dataManager = [DataManager sharedInstance];_cachedData = [dataManager.todoList objectAtIndex:self.selectedIndex];}次にsaveボタンが押されたときの処理を実装します。追加の場合はNSMutableArrayのaddObjectメソッドを使ってデータを追加します。// データを保存するDataManager *dataManager = [DataManager sharedInstance];// indexが初期値の場合は追加if (self.selectedIndex == kDefaultSelectedIndex){[dataManager.todoList addObject:_cachedData];}
  25. 25. 25•TextFieldからLabel へ変更詳細画面用ViewController•日付を文字列に変換NSDateFormatterというクラスを使ってNSDate型オブジェクトから文字列を取得する•prepareForSegueの実装何行目のデータを見ていたかというデータを渡す13年5月25日土曜日詳細画面用のViewControllerを作成します。TextFieldで表示を行っていたものをLabelで表示するようにしましょう。そして、編集ボタンが押されたときに何行目のデータを参照していたかという情報を渡してあげます。これにはprepareForSegueを使います。最後に日付を文字列に変換しましょう。NSDateFormatterというクラスを使うとNSDate型のオブジェクトから文字列を取得することが出来ます。NSDateFormatter *dateFormat = [[NSDateFormatter alloc]init];[dateFormat setDateFormat:@"yyyy/MM/dd"];
  26. 26. このようになりましたか?2613年5月25日土曜日今のをふまえて実装してみましょう。このようにデータの追加が出来るようになったでしょうか。
  27. 27. データの保持27ここではNSUserDefaultを使いましょう•変更したデータを端末に保持するにはいくつか方法があるCoreData,SQLite,UserDefaultなど・・・13年5月25日土曜日今までの方法ではアプリを落としたらデータが初期化されていました。データを保持するにはいくつか方法があるのですが、ここでは一番簡単な方法を紹介します。Userdefaultsを使います。
  28. 28. NSUserDefault28• UserDefaultの取得:standardUserDefaults• データの設定:setObject forKey• データの保存:synchronize• データの取得:arrayForKey (XXForKey)13年5月25日土曜日[NSUserDefaults standardUserDefaults]でUserdefaultsを取得します。setObjectメソッドでデータの設定を行い、synchronizeメソッドで保存を行います。arrayForKeyでデータの取得を行います。シングルトンのクラスにデータの保存メソッドを実装してみましょう。このようになります。- (void)saveTodoList {// todoListをUserDefaultに保存するNSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];[userDefaults setObject:_sharedInstance.todoList forKey:@"todoList"];[userDefaults synchronize];}
  29. 29. 位置情報の取得29位置情報に必要なものといえば・・・緯度と経度緯度と経度を取得するにはCoreLocataionFrameworkを使用する13年5月25日土曜日では、これから位置情報の取得方法について説明します。位置情報に必要なものは何でしょうか。緯度と経度ですね。緯度と経度を取得するには、CoreLocationFrameworkです。XCodeにCoreLocationFrameworkを追加してみましょう。
  30. 30. 位置情報の取得30位置を取得するのはCoreLocationManager現在地更新開始startLocationUpdateメソッド現在地取得完了(delegateメソッド)didUpdateLocationsメソッドdidUpdateToLocationメソッド(iOS6より古い場合)delegateメソッドを使うにはどうすれば良いのでしょうか13年5月25日土曜日位置を取得するためにはCoreLocationManagerを使用します。[[CoreLocation alloc]init]でCoreLocationManagerの初期化を行います。現在地の更新開始を行うには、startLocationUpdateメソッドを呼び出します。更新終了するにはstopLocationUpdateメソッドを呼び出します。現在地が更新されるとdidUpdateLocationsメソッドが呼び出されます。これはdelegateメソッドなので、delegateメソッドが呼ばれるようにしなくてはならないのですが、どうすれば良いのでしょうか。didUpdateLocationsには位置情報が格納されています。locataionsの最後のオブジェクトに最新の位置情報が格納されているので、取得しましょう。iOS6より古い場合はdidUpdateToLocationを使用します。ヘッダファイルには以下のように記述します。@interface ViewController : UIViewController <CLLocationManagerDelegate>ViewControllerのviewDidLoadメソッドでこのようにdelegateを設定します。_locationManager.delegate = self;
  31. 31. 位置情報の取得フロー31startLocationUpdatedidUpdateLocationsstopLocationUpdateアプリ内でメソッド実行位置が更新されたという通知13年5月25日土曜日アプリ内でstartLocationUpdateメソッドを実行すると位置更新が開始され、位置が更新されるとdidUpdateLocationsメソッドが呼ばれます。位置更新の必要がなくなったらstopLocationUpdateを呼ぶと、位置更新が止まります。(バッテリーの消費も激しいので、必要の無いときは位置更新を止めておきましょう)
  32. 32. このようなアプリを作ります32新しいプロジェクトを作成して緯度と経度を表示するアプリを作りますボタンを押したら位置情報取得開始13年5月25日土曜日では、新しいプロジェクトを作成して、緯度と経度を表示するアプリを作ってみましょう。ボタンを押したら位置情報の取得開始を行い、もう一回押したら位置情報の取得を終了します。このようにボタンの表記を変えてみましょう。- (IBAction)startAndStop:(id)sender {NSString *buttonTitle;// 更新中でない場合if (!_isUpdatingLocation) {// 位置取得開始[_locationManager startUpdatingLocation];buttonTitle = @"現在地取得終了";} else {// 位置取得終了[_locationManager stopUpdatingLocation];buttonTitle = @"現在地取得開始";}// フラグを反転_isUpdatingLocation = !_isUpdatingLocation;// ボタンのラベルを変更するUIButton *button = (UIButton *)sender;[button setTitle:buttonTitle forState:UIControlStateNormal];}
  33. 33. シミュレータでの一更新33シミュレータのデバッグ→位置→位置情報をカスタマイズで緯度経度を変更可能13年5月25日土曜日シミュレータでも現在地の更新は可能です。シミュレータのメニューから位置情報をカスタマイズという画面を表示し、緯度、経度を変更することが出来ます。
  34. 34. 地図を表示する34地図を表示するにはMapKitFrameworkを使いますMKMapViewで地図を表示する13年5月25日土曜日では今度は地図を表示してみましょう。地図を表示するには、MapKitFrameworkが必要なので、XCodeに追加します。新しくプロジェクトを作って、MapKitFrameworkとCoreLocationFrameworkを追加します。ViewController上にMKMapViewとボタンを配置し、ボタンを押したら位置の更新を開始します。
  35. 35. 地図を表示する35地図の表示には以下のメソッドを使用する※位置情報が更新された時に実行しますsetCenterCoordinateメソッド中心の緯度経度を設定するsetRegionメソッド表示範囲を設定する※MKCoordinateRegionMakeWithDistanceで表示範囲を設定可能13年5月25日土曜日地図を表示するにはMKMapViewのsetCenterCoodinateメソッドに緯度経度を設定しますdidUpdateLocationsメソッドの引数として渡されたCLLocationsの緯度経度を中心にしてあげればよいのです。ただしこのままだと、かなり広い範囲でしか表示されないので、半径1キロメートルの範囲を表示するようにしてみましょう。範囲を設定するにはMKMapViewのsetRegionメソッドを実行します。範囲はMKCoordinateRegionMakeWithDistanceで設定できます。このようなコードになります。// Locationを取得するCLLocation *currentLocation = [location lastObject];// 表示範囲を設定する(半径1キロ)MKCoordinateRegion region = MKCoordinateRegionMakeWithDistance(currentLocation.coordinate, 1000.0,1000.0);// MapViewを更新する[self.mapView setCenterCoordinate:currentLocation.coordinate];[self.mapView setRegion:region animated:YES];では、実装してみましょう。
  36. 36. このようになったでしょうか3613年5月25日土曜日このように現在地に地図の中心を合わせることが出来るようになったでしょうか。
  37. 37. ご清聴ありがとうございました3713年5月25日土曜日

×