2010-02-23 111 views
2

我正在創建一個「防崩潰」的NSDictionary,因爲我正在使用將服務器響應轉換爲NSDictionary的JSON序列化程序。因此,有時字典的關鍵字不存在。目前,這會使應用程序崩潰,但是我寧願返回一個空的NSString,以便我可以在界面中顯示它。防崩潰NSDictionary

解決方案可能是我每次訪問字典時檢查密鑰,例如,

if([returnedDictionary objectForKey:@"key"]){ 

    // Display [returnedDictionary objectForKey:@"key"]; 
}else{ 

    // Display @""; 
} 

但是,這很快就會導致代碼臃腫,難以閱讀。

我曾想過創建一個自定義的NSDictionary對象,喜歡的東西:

@interface NSSafeDictionary : NSDictionary ..... 

重寫objectForKey上述說法。

這是一個令人滿意的方法嗎?

感謝

回答

8

你總是會想串出你的字典還是會將其他對象存儲在其中?如果它只是字符串,我認爲最簡單的方法是在NSDictionary上構建一個category

@interface NSDictionary (EmptyStrings) 
- (NSString *)stringForKey:(id)aKey; 
@end 

@implementation NSDictionary (EmptyStrings) 

- (NSString *)stringForKey:(id)aKey { 
    id object = [self objectForKey:aKey]; 
    if (object == nil) { 
     return @""; 
    } 
    if ([object isKindOfClass:[NSString class]) { 
     return object; 
    } else { 
     return nil; 
    } 
} 

@end 
+0

謝謝男人....它正在工作 – jailani 2014-07-24 14:56:56

0

鑑於它在網絡上進來,我會認爲你想清理不僅僅是檢查空值的數據更多,但如果沒有,你並不真的需要從NSDictionary繼承。

在你的課堂上的一個簡單的實用方法會做的伎倆。

或者你可以創建的NSDictionary類別:

@interface NSDictionary (Safe) 

-(NSString*)safeStringForKey:(NSString*)key; 

@end 

(我敢肯定,你可以計算出執行。)