iOSのプロジェクトJSONはピットモデルを回します

JSONターンモデル

JSON伝達モデルは、開発者が満たされます。私たちは、サードパーティ製のフレームワークを使用していない9102年に、持っています。キーボードが乾燥しているピックアップ!.PNGをやっています
オープンpodfile、YYModelディンディンに書かれた名前は、それをインストールポッド。その後ESJsonFormatは、JSONによると、モデルが直接良い生成することができます。

特別な治療

何?返されたフィールドの値は、我々は必要なものではない
ことが多い私は、この時間を入力する必要がないものをインターフェイスフィールドに戻り、の値のいくつかに遭遇した私たちの日常の開発では、我々は、処理のためのフィールドになります。
栗の場合:

1 
2
3
4
5
6
/ **エラーコード* / 
@Property(非アトミック、ASSIGN)NSInteger ERROR_CODE;
/ **エラーメッセージ* /
@Property(非アトミック、コピー)ERROR_MSG NSStringの*;
/ ** *成功/
@Property(非アトミック、ASSIGN)BOOL isSuccess;

ERROR_CODEフィールドにJSONインターフェイスは、インターフェイスは、この要求が成功した私に教えて、このフィールドを使用します。ERROR_CODEは通常、私たちは、このネットワーク要求の成功後の結果が戻ってくるかどうかを示すために、自分の財産isSuccess年モデルでカスタムを追加し、開発を容易にする必要があり、成功した例1です。いつもの練習、isSuccessに割り当てられた決意の裁判官のERROR_CODE == 1、その結果、一度、設定時間に方法ERROR_CODEセットを上書きする、またはgetメソッドisSuccessをオーバーライドし、ERROR_CODEを返すまでの時間を取得するためのいずれか== 1つの結果。
古いドライバのために我々は、これらの用語は、日常の動作の一部であると考えています。その後、我々はどこピットを見てみましょうか?

ピットへ

私たちは、このケースを見て:
新しいモデルクラスを解析するように、各フィールドのためのインタフェースを返す4つのフィールド値は、使用されています。

1 
2
3
4
5
6
7
8
9
10
11
@interface ExamSubjectVo:NSObjectの

/ ** *テスト対象ID /
@Property(非アトミック、ASSIGN)NSInteger examSubjectValue;
/ **被験者名* /
@Property(非アトミック、強い)NSStringの* examSubjectName;
/ **主題スコア* /
@Property(非アトミック、強いです)NSStringの* subjectScore;
/ ** *基本的な規律ID /
@Property(非アトミック、ASSIGN)NSInteger subjectBaseId;
@end

しかし、理由はビジネスニーズの、および特別な治療に、一般的な試験や玉樹ワイケースのフィールドexamSubjectName名の必要性を区別するために、開発プロセスを容易にするためです。したがって、思考の通常の方法に従って、我々は、setメソッドを書き換える必要はあり

1 
2
3
4
5
6
7
8
9
- (無効)setExamSubjectName:(NSStringの*)examSubjectName { 
_examSubjectName = examSubjectName;
IF([examSubjectName isEqualToString:@ " ビッグボックス  のiOSプロジェクトJSONはモデルピットを回し、一般"]){
self.subjectBaseId = -100;
}
IF ([examSubjectName isEqualToString:@ "玉樹ワイ"]){
self.subjectBaseId = -200;
}
}

一見、何の問題もなく、解析する過程で、私たちが必要なものにフィールドの値。時間の実機測定、試験機の全て問題なく、iPhone5のに加えて、
iPhone5のに加えて、上、設定方法を参照するには、デバッグ時間が実際に行って、最終的なsubjectBaseIdは100、または100に変換されませんでした-200、あるsubjectBaseId値JSONカバー自体、見られている異なるCPUアーキテクチャデバイスに違いがある、実行順序設定方法。

ピット

それでは、どのように問題を解決するのですか?
そのような違いがあるので、それはそれに対処する方法を、すべての設定が完了した後、我々は唯一のすべてのフィールドにモデル化することができるように、いくつかの特別な処理場を行い、正確には?
読むYYModelソースは、確かに収穫され、十分に確認してください見つけることができます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
If the default json-to-model transform does not fit to your model object, implement
this method to do additional process. You can also use this method to validate the
model's properties.

@discussion If the model implements this method, it will be called at the end of
`+modelWithJSON:`, `+modelWithDictionary:`, `-modelSetWithJSON:` and `-modelSetWithDictionary:`.
If this method returns NO, the transform process will ignore this model.

@param dic The json/kv dictionary.

@return Returns YES if the model is valid, or NO to ignore this model.
*/
- (BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic;

YYModel提供了这么个方法,它会在+modelWithJSON:, +modelWithDictionary:, -modelSetWithJSON: and -modelSetWithDictionary:方法结束的时候调用。
所以我们对model特殊字段的处理,都应该放到这个方法去执行

1
2
3
4
5
6
7
8
9
- (BOOL)modelCustomTransformFromDictionary:(NSDictionary *)dic{
if ([self.examSubjectName isEqualToString:@"全科"]) {
self.subjectBaseId = -100;
}
if ([self.examSubjectName isEqualToString:@"语数外"]) {
self.subjectBaseId = -200;
}
return YES;
}

この方法では、問題が解決されます。
注、YYModelあり- (NSDictionary *)modelCustomWillTransformFromDictionary:(NSDictionary *)dic;
、この方法は非常に似ていますが、このメソッドの実装のタイミングと同じではありませんが、この例のニーズを満たしていないものの、変換モデルの前に行われますが、おそらく他の似たような状況で使用することです。

おすすめ

転載: www.cnblogs.com/liuzhongrong/p/12289590.html