2012-04-10 14 views
4

現在、以下のメソッドを使用してNullではないデータを検証しています。JSONレスポンスiPhoneアプリケーションのNull検証ではありません

if ([[response objectForKey:@"field"] class] != [NSNull class]) 
    NSString *temp = [response objectForKey:@"field"]; 
else 
    NSString *temp = @""; 

応答ディクショナリに何百もの属性(およびそれぞれの値)が含まれていると問題が発生します。この種の条件を辞書の各要素に追加する必要があります。

これ以外の方法はありますか?

任意Webサービスを変更するための提案(データベースにNULL値を挿入しない場合を除く)

すべてのアイデア、誰でも??

答えて

7

それからちょうどあなたがしたい場合、これは空白の文字列を返すように変更することができます

[response objectOrNilForKey:@"field"];

を使用することができます好き。

+0

偉大なトリック。完璧なソリューション。ありがとう。カテゴリの大きな使用。 – Prazi

0

まずマイナーポイント:あなたが、最も簡単な方法は、空の文字列にリセットする[NSNull null]の価値を持っているあなたの辞書内のすべてのキーをしたい場合は、あなたのテストは慣用的ではない、あなたは

if (![[response objectForKey:@"field"] isEqual: [NSNull null]]) 

を使用する必要がありますそれは上記のresponseを前提としてい

for (id key in [response allKeysForObject: [NSNull null]]) 
{ 
    [response setObject: @"" forKey: key]; 
} 

で修正することは可変辞書です。

しかし、実際にデザインを確認する必要があると思います。 [NSNull null]の値は、データベースに許可されていない場合は許可しないでください。

0

それはあなたが必要なものを私のために非常に明確ではないですが。

キーの値がNULLでないかどうかを確認する必要がある場合は、これを行うことができます:あなたはいくつかのセットを持っている場合は

for(NSString* key in dict) { 
    if(![dict valueForKey: key]) { 
     [dict setValue: @"" forKey: key]; 
    } 
} 

を必要なキーは、あなたは静的配列を作成し、これを行うことができます。

:あなたはあなたのデータをチェックする方法に続いて

static NSArray* req_keys = [[NSArray alloc] initWithObjects: @"k1", @"k2", @"k3", @"k4", nil]; 

を私がやったことはNSDictionaryの

@interface NSDictionary (CategoryName) 

/** 
* Returns the object for the given key, if it is in the dictionary, else nil. 
* This is useful when using SBJSON, as that will return [NSNull null] if the value was 'null' in the parsed JSON. 
* @param The key to use 
* @return The object or, if the object was not set in the dictionary or was NSNull, nil 
*/ 
- (id)objectOrNilForKey:(id)aKey; 



@end 


@implementation NSDictionary (CategoryName) 

- (id)objectOrNilForKey:(id)aKey { 
    id object = [self objectForKey:aKey]; 
    return [object isEqual:[NSNull null]] ? nil : object; 
} 

@end 

上のカテゴリを置いている

NSMutableSet* s = [NSMutableSet setWithArray: req_keys]; 

NSSet* s2 = [NSSet setWithArray: [d allKeys]]; 

[s minusSet: s2]; 
if(s.count) { 
    NSString* err_str = @"Error. These fields are empty: "; 
    for(NSString* field in s) { 
     err_str = [err_str stringByAppendingFormat: @"%@ ", field]; 
    } 
    NSLog(@"%@", err_str); 
} 
0
static inline NSDictionary* DictionaryRemovingNulls(NSDictionary *aDictionary) { 

    NSMutableDictionary *returnValue = [[NSMutableDictionary alloc] initWithDictionary:aDictionary]; 
    for (id key in [aDictionary allKeysForObject: [NSNull null]]) { 
    [returnValue setObject: @"" forKey: key]; 
    } 
    return returnValue; 
} 


response = DictionaryRemovingNulls(response); 
関連する問題