JSONターンモデル
JSON伝達モデルは、開発者が満たされます。私たちは、サードパーティ製のフレームワークを使用していない9102年に、持っています。キーボードが乾燥しているピックアップ!
オープンpodfile、YYModelディンディンに書かれた名前は、それをインストールポッド。その後ESJsonFormatは、JSONによると、モデルが直接良い生成することができます。
特別な治療
何?返されたフィールドの値は、我々は必要なものではない
ことが多い私は、この時間を入力する必要がないものをインターフェイスフィールドに戻り、の値のいくつかに遭遇した私たちの日常の開発では、我々は、処理のためのフィールドになります。
栗の場合:
1 |
/ **エラーコード* / |
ERROR_CODEフィールドにJSONインターフェイスは、インターフェイスは、この要求が成功した私に教えて、このフィールドを使用します。ERROR_CODEは通常、私たちは、このネットワーク要求の成功後の結果が戻ってくるかどうかを示すために、自分の財産isSuccess年モデルでカスタムを追加し、開発を容易にする必要があり、成功した例1です。いつもの練習、isSuccessに割り当てられた決意の裁判官のERROR_CODE == 1、その結果、一度、設定時間に方法ERROR_CODEセットを上書きする、またはgetメソッドisSuccessをオーバーライドし、ERROR_CODEを返すまでの時間を取得するためのいずれか== 1つの結果。
古いドライバのために我々は、これらの用語は、日常の動作の一部であると考えています。その後、我々はどこピットを見てみましょうか?
ピットへ
私たちは、このケースを見て:
新しいモデルクラスを解析するように、各フィールドのためのインタフェースを返す4つのフィールド値は、使用されています。
1 |
@interface ExamSubjectVo:NSObjectの |
しかし、理由はビジネスニーズの、および特別な治療に、一般的な試験や玉樹ワイケースのフィールドexamSubjectName名の必要性を区別するために、開発プロセスを容易にするためです。したがって、思考の通常の方法に従って、我々は、setメソッドを書き換える必要はあり
1 |
- (無効)setExamSubjectName:(NSStringの*)examSubjectName { |
一見、何の問題もなく、解析する過程で、私たちが必要なものにフィールドの値。時間の実機測定、試験機の全て問題なく、iPhone5のに加えて、
iPhone5のに加えて、上、設定方法を参照するには、デバッグ時間が実際に行って、最終的なsubjectBaseIdは100、または100に変換されませんでした-200、あるsubjectBaseId値JSONカバー自体、見られている異なるCPUアーキテクチャデバイスに違いがある、実行順序設定方法。
ピット
それでは、どのように問題を解決するのですか?
そのような違いがあるので、それはそれに対処する方法を、すべての設定が完了した後、我々は唯一のすべてのフィールドにモデル化することができるように、いくつかの特別な処理場を行い、正確には?
読むYYModelソースは、確かに収穫され、十分に確認してください見つけることができます。
1 |
/** |
YYModel提供了这么个方法,它会在+modelWithJSON:
, +modelWithDictionary:
, -modelSetWithJSON:
and -modelSetWithDictionary:
方法结束的时候调用。
所以我们对model特殊字段的处理,都应该放到这个方法去执行
1 |
- (BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic{ |
この方法では、問題が解決されます。
注、YYModelあり- (NSDictionary *)modelCustomWillTransformFromDictionary:(NSDictionary *)dic;
、この方法は非常に似ていますが、このメソッドの実装のタイミングと同じではありませんが、この例のニーズを満たしていないものの、変換モデルの前に行われますが、おそらく他の似たような状況で使用することです。