2010-02-23 4 views
2

Я ищу, чтобы создать «Crash-proof» NSDictionary, поскольку я использую сериализатор JSON, который преобразует ответ сервера в NSDictionary. Как результат, иногда ключа для словаря нет. В настоящее время это приведет к сбою приложения, однако я предпочел бы, чтобы пустая NSString была возвращена, поэтому я могу отобразить это в интерфейсе.Crash-proof NSDictionary

Решение может заключаться в том, что я проверяю ключ каждый раз, когда я обращаюсь к словарю, например.

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

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

    // Display @""; 
} 

Однако это скоро приводит к раздутому, трудно читаемому коду.

Я думал о создании пользовательских NSDictionary объекта, что-то вроде:

@interface NSSafeDictionary : NSDictionary ..... 

, отменяющий objectForKey с вышеуказанным заявлением.

Это удовлетворительный подход?

Благодаря

ответ

8

Вы всегда будете хотеть, чтобы получить строки из словаря или другие объекты будут сохранены в нем? Если это всего лишь строки, я думаю, что самый простой способ - построить category в NSDictionary.

@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

0

Учитывая, что речь идет в по сети, я думаю, что вы хотели бы, чтобы дезинфицировать данные больше, чем просто проверка на пустые значения, но если нет, то вам не нужно наследовать от NSDictionary ,

Простой способ утилиты в вашем классе будет делать трюк.

Или вы можете создать категорию на NSDictionary:

@interface NSDictionary (Safe) 

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

@end 

(я уверен, что вы можете выяснить реализацию.)

Смежные вопросы