質問

JSONファイルを解析しています。

NSDictionaryを取得した後、ディクショナリ内のオブジェクトをオブジェクトの配列に解析します。ただし、特定のJSONファイルではNULLになりますが、これは問題ありませんが、何かを期待しているがnullになっている場所ではアプリがクラッシュします。

- (id)initWithDictionary:(NSDictionary *)boxDictionary {
 if ([self init]) {
  // ... 
  int numberOfBoxes = [[boxDictionary valueForKey:@"box_count"] intValue];
  int numberOfItemsInBoxes = [[boxDictionary valueForKey:@"box_items_count"] intValue];
        // ..
 }
 return self;
}
役に立ちましたか?

解決

基本的な問題は、valueForKey :.の呼び出しから返されるNSNullにintValueメソッドがないことのようです。

intValueメソッドを追加できますが、NSNullに対して何を返しますか? 0? -1?

そのためのコードは次のようになります。

MyNullExtensions.h内:

@interface NSNull (integer)
-(int) intValue;
@end

そしてMyNullExtensions.mで:

#import "MyNullExtensions.h"

@implementation NSNull (functional)
-(int) intValue
{
    return -1;
}
@end

後で、 ブレイク。

他のヒント

int nil にすることはできないため、 intValue にはを取得できないことを通知する方法がありません nil オブジェクトのintValue intValue を要求する前に、 valueForKey:からオブジェクトが返されたかどうかを確認する必要があります。

if ([boxDictionary valueForKey:@"box_count"])
    numberOfBoxes = [[boxDictionary valueForKey:@"box_count"] intValue];

intValueを呼び出す前に、NSNullに対して簡単なテストを行うだけです。 NSNullオブジェクトを拡張する必要はありません。

if ([rate valueForKey:@"value"]!=[NSNull alloc]) {

    // put your code here

}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top