未分類

新人奮闘記11

iOS 入門

お天気アプリ開発

お天気アプリの作成にあたって、定番な位置情報の取得

現在値に基づいた天気を表示する事が前提となります。

今回は位置情報の取得について困った事等を記載していきたいと思います。

iOS アプリを開発する時、必ず必要な要素で、位置情報の利用許可というものがあり、アプリを使用する際

「位置情報の利用を許可しますか?」とよく見かけるポップアップ

コチラは、iOS8から、位置情報サービスを利用したアプリを開発する時は、ユーザー認証を得て下さいと言う意味で、実装する際必須の項目となっています。

この認証をえなければ、位置情報の取得ができない仕組みになっています。

対応としてユーザに許可を要求する、requestAlwaysAuthorizationまたは、requestWhenInUseAuthorizationメソッドを実装します。

 

まとめ

バックグラウンドで、位置情報を利用するアプリでは、requestAlwaysAuthorizationメソッドを明示的に実装する。

アプリ利用時のみ位置情報サービスを得る場合は、requestWhenInUseAuthorizationを明示的に実装する。

位置情報を利用する目的をそれぞれ、info.plistファイルにてキーと値で記載する。

起動時のみ利用: NSLocationWhenInUseUsageDescription ⇒ 目的必須(例:起動時のみ位置情報を使用します)

バックグラウンドでも利用: NSLocationAlwaysUsageDescription    ⇒ 目的必須(例:常時位置情報を使用します)

 



新人奮闘記9

iOSでお天気アプリ開発

現在お天気アプリを作成していまして、Open Weather Map というお天気情報をAPIで提供しているサービスを使ってアプリを作成しているkenyです。
Open Weather Map APIからJSONデータを取得しようとhttpリクエストする時にハマってしまいましたので記します。ATSが要因ですが…

続きを読む



新人奮闘記2

今回はMVCモデルで書き始めた、一般的なフォームを作成していきます。

簡単なフォームであれば、MVCモデルで書かずとも可能でしょうが、大きなプログラムになるにつれて、コードの見直しやメンテナンスが、難しくなってきます。

まず、MVC(Model View Controller)とはどういった事か、図で簡単に書いてみました。

mvc


ユーザーが画面を表示する例で見てみます。

① User —>  ② Controller —>  ③ View  —>  ④ User

 

       ①Userは見たい画面をControllerへリクエストします。

                  

       ②ControllerではUserのリクエストに応じ、Viewを呼びます。

                  

       ③ViewはControllerのリクエストに応え、適切な結果を返します。

                  

       ④Userは、③の結果をレスポンスとして画面を確認します。

それでは、フォームを作る場合の流れを追っていきたいと思います。

ここでは、入力画面 –> 確認画面 –>  完了画面と遷移する場合で描いてみます。


[入力画面 ]

入力フォームを表示させるまでの流れですが、基本的に前回と同じです。
※ただし、DB接続などの記述はModelとして扱う事が一般的なので、の前にContorllerとModelのやり取りが発生します。

初回アクセス時、コントローラーから、ビューを、テンプレートとして読み込みます。
よってコントローラーには、htmlファイルをテンプレートとして読み込む記述が必要です

読み込み後はフォーム入力画面が生成され、フォーム内にユーザーが、名前やアドレスなど、入力を行い、確認ボタン等を押下し、確認画面へ、遷移します。
form


[確認画面 ]

この時(確認ボタン押下)、の流れもやはり、コントローラーがユーザーのリクエストを受け取り
必要な処理を行います。必要な処理は主に
ユーザの入力値をチェック確認画面の表示入力画面から遷移してきたか、などたくさんありますが、今回は
割愛します。
コントローラーが必要な処理を完了した後、確認画面のテンプレートを呼び出します。

confirm
ユーザーが入力した値が反映され確認画面として表示されています。

今回は確認画面までとなりますが、次回は確認画面から図を交えて更新して行きたいと思います。

 

keny

 

 



新人奮闘記4

今回は、再帰関数を用いて素因数分解をするプログラムを作成してみました。

素因数分解と突然言われると、懐かしかったり、どうだったかな?という事で簡単に計算例だけ紹介しておきます。

素因数分解は自然数を素数の積で表します。

72 ,120をそれぞれ素因数分解すると

soinsu

のようになります。

今回は、与えられた自然数を2^3 × 3^2のようにハット記号で表すプログラムを書いていきます。

さっそく再帰関数を用いたコードを書いてみました。

soinsu1

 

     $x:素数の初期値    $n:今回のターゲット   $c:累乗の値x^c

5行目で関数をコールします。

8行目にて、xがnより大きい時、この関数は終了します。

9~15行目で、実際の計算を行っています。

16行目にて、自分自身をコールしていますが、この時1を加算してコールしています。

これにより、8行目で、関数は終了する事ができます。

7,8,16行目だけ見るとfor文と似た動きである事がわかります。

[基本的なfor文の動作]

初期化->条件式->ステートメント->インクリメント->条件式->ステートメント

loop_ex

[prime_Fact()の動作]

初期化->条件式->ステートメント->インクリメント->初期化->条件式

再帰呼び出しする時、$x+1,もしくは呼び出し以前に$xを変化させなければ無限ループになってしまう事に注意が必要です。

この条件式と再帰呼び出しの間がn回実行される処理という事になります。

[実行結果]

soinsu_ke

結果は予定通りですが…

いまいち納得がいきません!

上記コードだと、for文の代わりに関数を使って、関数内部(15行目)でechoを使って出力しています。

5行目にprim_Fact()を実行した場所で出力したいのです。つまり、実行結果を丸ごと返り値としてreturnして関数外部で使いたい。

これを解決しようとした時にハマりました。

それでは単純に関数内部で、結果文字列を貯めこんで、return しちゃえばいいんじゃないの?

という事で

14行目で最初の一度だけ$resを初期化

15行目にて連結を繰り返す。

7行目のreturnで貯め込んだ文字列$resを返す。

4行目にて、返り値を確認しています

コード

noticeres

 

[実行結果]

saikinotice_k

見ての通り$resは未定義扱い、おまけにNULLでreturnされていない事がわかります。

繰り返しの中で最後に一度だけ、return されているはずなのに、、、

そこで、returnはどこに何を返すのか、改めて考えていると、大きな勘違いをしている事に

気がつきました。returnは「呼び出し元へ値を返す」事はわかっていたつもりでした。

上記のコードは、7行目でreturnした値は,4行目に返る事を期待したコードです。

しかし、NULLという結果になっているという事は、4行目の関数には返っていません。

では、7行目のreturnはどこへ返っているのでしょうか。

結論から言うと、16行目のprime_Fact()へ返っていました。

動作を図へ示します。

 

saikizu

 

いままでは、シンプルに6行目から16行目を単に繰り返していると考えてました。

上図のように全く同じ関数ではないと考えると、ロジックは変化し、コードも変化します。

図を踏まえた上でもう一度コードを書きなしてみようと思います。

saikicode_f

[実行結果]

soinsu_ke

14行目で$strに最初の素因数分解の結果2^3が格納され、それを引数にして、次のprime_Fact()へ値を渡しています。

これを繰り返し、7行目のreturnが実行された時、一つ前の関数(呼び出し元)へ15行目へ値が返ります。

最終的に初めて関数をコールした場所(5行目)へ値が返ってくるという仕組みです。

以上、細かな例外処理は、割愛させていただきますが、再帰関数に頼る時には、役にたてばと思います。

 

keny

 



新人成長記録3rd

毎度のことながら、Androidを猛勉強中のpoppyです。

ここ最近はAndroidのプログラミングが難しく感じてきました。
特に
【ListViewに任意(動的)なViewを入れる】
【Fragmentの中で動的レイアウトの作成】
この2つ
gatag-00003478

記事にすることで自分自身、どこまで理解できているかの指針にもなるので、
書いていこうとおもいます。

主にプログラムでの紹介になっていきます。

続きを読む




アプリ関連ニュース

お問い合わせはこちら

お問い合わせ・ご相談はお電話、またはお問い合わせフォームよりお受け付けいたしております。

tel. 06-6454-8833(平日 10:00~17:00)

お問い合わせフォーム