2016-05-12 1 views
0

私はiOS開発を学んでいます。現在、天気予報アプリであるホビープロジェクトを始めました。私はオープンなREST APIを見つけました。都市の気象データを取得するリクエストを送信できます。iOS newbie:ローカルのjsonファイルからIDを検索し、サーバーにリクエストします

は、REST APIは私が街のID代わりの都市名&それは私にフィールドcity_idcity_namelongitudelatitudeと都市のオブジェクトが含まれている20メガバイトのJSONファイルを提供してリクエストを送信する必要があります。私はこれらのフィールドを持つためにCityクラスを作成する必要があることを知っています。

私のアプリは都市名を入力できるようになっています。その後、都市IDはです。私はすべての都市のIDが必要になりますので

  1. が、私は20メガバイトのJSONファイル&をダウンロードする必要があります私のアプリにそれを埋め込む:私の質問は、このためのベストプラクティスについてですか?それは私のアプリのサイズが20MBよりも大きいことを意味しますか?これを処理するためのより良い練習ですか?

  2. プロジェクトに20MB jsonファイルを配置する必要がある場合は、コンテンツをプログラムでCityのリストに解析するにはどうすればよいでしょうか?

  3. ユーザーが1つの都市名を入力すると、jsonファイルのすべての都市をスキャンすると効率が悪くなりますが、都市名の都市IDを見つける効率的な方法json)?

==== THE OPEN REST API ===

+0

オープンなREST APIを提供していますので、ぜひご覧ください –

+0

コアデータなどを使用する場合は、JSONファイルでデータモデルをシードできます。クエリ、管理などのAPIを使用できます。 –

+0

20MBもしそれが絶対に必要でないならば、バンドルするかなり巨大なファイルです。 IDの都市名を交換するためのネットワーク通話がないと確信していますか?ドキュメントへのリンクを投稿できますか? – Dare

答えて

1

アプリにJSONを含める必要はありません。実際、そうすることを強くお勧めします。これは、マニュアルに従って、次のとおりです。

説明:

あなたは都市名や都市名と国コードで呼び出すことができます。 APIは検索語句に一致する結果のリストで応答します。 API呼び出し:

api.openweathermap.org/data/2.5/weather?q={city名}

api.openweathermap.org/data/2.5/weather?q={city名}、{国コード}

パラメータ:カンマで割っ

Q都市名と国コード、使用ISO 3166国コードAPI呼び出しの

例:

api.openweathermap.org/data/2.5/weather?q=London

この情報を考えるとapi.openweathermap.org/data/2.5/weather?q=London,uk

、あなたがリクエストを送信することができますapi.openweathermap.org/data/2.5/weather?q=London

応答には、その後の天気予報の呼び出しに必要なデータが含まれている必要があります。

アプリのバンドルに20MBのノイズを含める必要はありません。

+0

ありがとうございます。都市名で検索すると都市IDで検索する場合と比べて正確なデータは得られません。だからこそ私は都市IDを使用しようとしますが、20MBの都市jsonファイルを扱うことに悩まされています –

+0

事実は同じ名前の世界中の都市があることです。これが精度に苦しむところです。あなた自身で照会したファイルをバンドルしても、この問題は解決しません。市のIDはユニークです。あなたが単一の都市IDをハードコードする予定の場合、これはうまくいくでしょう。ユーザーが都市名を入力できるようにする予定であるため、APIがすでにこれを行う場合には、ローカルマッチを提供するためにはるかに多くの作業を行うことになります。 – Dare

+0

あなたは正しいです、私は都市名を使用するつもりですが、問題は少ないです。 –

0
  1. 私はCityオブジェクトの配列を作成し、それらのすべてを必要とすると仮定すると、各Cityオブジェクト(へのデータを解析したい。そうでない場合は、あなたが見つける必要があるでしょうあなたが望んでいないものを解析する方法)。これらをストレージに書き込んでいない限り、アプリのサイズを増やすべきではなく、使用する方法に応じてダウンロードして解析するのに少し時間がかかるかもしれませんがそれはすべて最適化の楽しさの一部です。

  2. 多くのJSON解析用のiOSライブラリがありますが、ネットワークリクエストのためにRestKitを使用した経験が多く、Objective-C ObjectパーサーのJSONが組み込まれているので、非常に簡単です。基本的に、JSONパーサライブラリに関するいくつかの調査を行い、ニーズに最も適したものを選んでください。あなたは自分でそれを解析する必要はありません。

  3. 私は、city_nameをキーとしてを値としてNSDictionaryを作成します。その後city_id単に、私は彼らにはない20メガバイトのファイルに対する要求で自分のサーバーをバンドルしていない負担するように求めていることを信じてい

+0

私はあなたが私の第1の質問のポイントを得ていないと思います。私は20MBのjsonを最初にプロジェクトに最初にバンドルする必要があるということを意味しています。私の質問で言っている。私はそれが大きくて非効率であると感じます。私は20MBのjsonを実行時にダウンロードすることができません。なぜなら、アプリケーションがより効率的でないためです。 –

0

(もちろん、あなたの実際の変数名に置き換え)[dictionary objectForKey:enteredCity]を呼び出して取得します多くは変わるようです。

私は、これをsqlite db(または他のシリアライズされた他の形式)に変換するdevマシンで実行するスクリプトを作成します。 JSONをバンドルして実行時に解析しないでください。実行時にクエリ可能なものに変換してください。

関連する問題