3

設定:

JSON経由でデータが入ってきます。

NSJSONSerialization を使用して、JSON をオブジェクトに変換します。

JSON の数値は、Objective-C ではいくつかの異なる可能なクラス タイプとして提供されます。

( NSNumber, NSDecimalNumber or __NSCFNumber) - それらはすべて の下のクラス クラスタにありますNSNumber


問題:

NSNumber1) type のいずれかの値を持っている場合、クラス クラスター「傘」 class - を取得する方法が必要NSNumber, NSDecimalNumber or __NSCFNumberです。

文字列も同様です。これらのいずれかがある場合、を取得する方法が必要ですNSString: NSString, NSMutableString, __NSCFString, __NSCFConstantString

2) たとえば、NSString クラスター内のすべてのクラスのリストをコードで取得できる場合にも機能します。次に、実行時にリストを動的に作成し、リストが完全であることを確認します。


私がこれまでに持っているもの:

これまでのところ、私はそれを行うための正気の方法を思いつくことができませんでした. だから私は許可されたタイプのリストを持っていますが、それは完全ではないかもしれません.

コード: https://github.com/icanzilb/JSONModel/blob/master/JSONModel/JSONModel.m#L45

4

1 に答える 1

2

あなたはこれを行うことができます:

id object = // obtain the object somehow

Class cls = Nil; // for now

// property list types, roughly equivalent to JSON's fundamental types
NSArray *classes = @[[NSString class], [NSNumber class], [NSArray class], [NSDictionary class], [NSData class], [NSDate class]];

Class c;
for (c in classes) {
    if ([object isKintOfClass:c]) {
        cls = c;
        break;
    }
}

classes配列に他のクラスを追加することで、リストを拡張できます。最後に、インスタンスでclsあるクラス クラスターが含まれるか、どちらのインスタンスでもない場合。objectNil

于 2012-12-12T17:19:21.523 に答える