不少時候服務器傳過來的空數據是NSNULL類型的,客戶端沒有作好判斷,很容易形成程序崩潰。咱們能夠將傳過來的空數據用@""代替來解決問題。分別爲字典和數組添加一個類目方法,將接收的字典或數組調用該方法便可。代碼以下。數組
//字典 @interface NSDictionary (JRAdditions) - (NSDictionary *)dictionaryByReplacingNullsWithStrings; @end @implementation NSDictionary (JRAdditions) - (NSDictionary *)dictionaryByReplacingNullsWithStrings { const NSMutableDictionary *replaced = [self mutableCopy]; const id nul = [NSNull null]; const NSString *blank = @""; for (NSString *key in self) { id object = [self objectForKey:key]; if (object == nul) [replaced setObject:blank forKey:key]; else if ([object isKindOfClass:[NSDictionary class]]) [replaced setObject:[object dictionaryByReplacingNullsWithStrings] forKey:key]; else if ([object isKindOfClass:[NSArray class]]) [replaced setObject:[object arrayByReplacingNullsWithBlanks] forKey:key]; } return [NSDictionary dictionaryWithDictionary:[replaced copy]]; } @end //數組 @interface NSArray (NullReplacement) - (NSDictionary *)arrayByReplacingNullsWithBlanks; @end @implementation NSArray (NullReplacement) - (NSArray *)arrayByReplacingNullsWithBlanks { NSMutableArray *replaced = [self mutableCopy]; const id nul = [NSNull null]; const NSString *blank = @""; for (int idx = 0; idx < [replaced count]; idx++) { id object = [replaced objectAtIndex:idx]; if (object == nul) [replaced replaceObjectAtIndex:idx withObject:blank]; else if ([object isKindOfClass:[NSDictionary class]]) [replaced replaceObjectAtIndex:idx withObject:[object dictionaryByReplacingNullsWithStrings]]; else if ([object isKindOfClass:[NSArray class]]) [replaced replaceObjectAtIndex:idx withObject:[object arrayByReplacingNullsWithBlanks]]; } return [replaced copy]; } @end