0

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;
}
4

3 に答える 3

4

基本的な問題は、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

後で、ブレイク。

于 2009-11-27T19:57:31.797 に答える
0

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

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

    // put your code here

}
于 2012-11-30T10:09:34.723 に答える
0

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

if ([boxDictionary valueForKey:@"box_count"])
    numberOfBoxes = [[boxDictionary valueForKey:@"box_count"] intValue];
于 2009-11-27T19:59:05.617 に答える