2015-09-22 2 views
1

Я работаю над приложением, которое извлекает плотные многоуровневые бизнес-объекты из веб-сервиса. У меня в Obj C созданы классы, которые представляют и правильно отображают объект Webservice (например, пользовательский объект, объект post, объект группы)JSON, Obj C, Safety и null check

Теперь я получаю данные назад как json, а для некоторых точек данных ответ возвращается с некоторыми частями данных является нулевым, или некоторые части объекта просто отсутствуют (например, объект пользователя без фамилии). Естественно, я хотел бы начать проверять, если

JSONRESPONSE 

Имеет значение FirstName, а затем LastName, а затем город, и т.д., и т.д.

Очевидно, что существует много избыточности в этом, и я не; хотите писать одну и ту же проверку снова и снова, но думая о методе класса в классе утилит, который у меня есть.

У кого-нибудь есть идеи по этому поводу? Какой лучший подход для этого?

Спасибо.

+0

Как вы разбор этого JSON? Как выглядит «нуль» в анализируемой объектной модели документа? – trojanfoe

ответ

0

Один из способов борьбы с ним состоит в том, чтобы ваши классы использовали NSKeyValueCoding, а затем настроили некоторый метод проверки, который принимает некоторую структуру данных (например, массив имен атрибутов) и проверяет наличие необходимых атрибутов, значений по умолчанию и т. Д. Остальное до вас, если вы хотите выполнить некоторую регистрацию, установить значения по умолчанию и т. д. Структура данных действительно зависит от того, сколько валидации вам нужно.

0

Вы можете попробовать, добавив категории, которые null & nil проверить за вами. Чтобы избежать сбоев из-за вводов nil, вы можете вернуть пустые строки. Например, ниже приведена категория на NSDictionary, которая помогает извлекать строки nil/null.

- (id)nullSafeObjectForKey:(NSString *) iKey { 
    id retrievedValue = [self objectForKey:iKey]; 

    return ([retrievedValue isKindOfClass:[NSNull class]] || retrievedValue == nil) ? @"" : retrievedValue; 
} 
0

Вы можете использовать этот метод для NSString, NSArray, NSDictionary, NSData, UIImage

- (BOOL)isObjectEmpty:(id)object { 
     if ([object isKindOfClass:[NSNull class]] || object == nil) { 
      return YES; 
     } 
     if ([object isKindOfClass:[NSString class]]) { 
      if (object == nil || ([object respondsToSelector:@selector(length)] && [(NSString *)object length] == 0)) { 
       return YES; 
      } 
     } 
     else if ([object isKindOfClass:[NSArray class]]) { 
      if (object == nil || ([object respondsToSelector:@selector(count)] && [(NSArray *)object count] == 0)) { 
       return YES; 
      } 
     } 
     else if ([object isKindOfClass:[NSDictionary class]]) { 
      if (object == nil || ([object respondsToSelector:@selector(count)] && [(NSDictionary *)object count] == 0)) { 
       return YES; 
      } 
     } 
     else if ([object isKindOfClass:[NSData class]]) { 
      if (object == nil || ([object respondsToSelector:@selector(length)] && [(NSData *)object length] == 0)) { 
       return YES; 
      } 
     } 
     else if ([object isKindOfClass:[UIImage class]]) { 
      if (object == nil) { 
       return YES; 
      } 
     } 
     return NO; 
    }