본문 바로가기

TechLog

Cocoa의 NSDictionary 객체에 nil 값 삽입하기

 

NSDictionary같은, Cocoa의 Collection 객체를 다룰 경우에 다음과 같은 문법을 왕왕 쓰게 된다 :

   1: NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys:
   2:                       @"value1", @"key1",
   3:                       @"value2", @"key2",
   4:                       @"value3", @"key3",
   5:                       nil];

 

헌데, 위와 같은 객체에 nil 값을 넣어야 할 경우가 생기면 어떻게 해야 할까? 이렇게? :

   1: NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys:
   2:                       @"value1", @"key1",
   3:                       nil, @"key2",
   4:                       @"value3", @"key3",
   5:                       nil];

 

위와 같이 코딩했을 경우 언뜻 보면 별 이상이 없는 것처럼 보이지만, 실제로 dic 객체를 뒤져보면 key1 / value1만 들어있는 것을 볼 수 있다. 왜냐고?  dictionaryWithObjectsAndKeys 메서드는 단순히 nil이 있을 경우 입력 인자가 끝났다고 판단하고, 그 뒤에 나오는 항목은 무시하기 때문이다.

 

그러면 컬렉션에 nil을 넣으려면 어떻게 처리해야 하는가? 이렇게 하면 된다 :

   1: NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys:
   2:                       @"value1", @"key1",
   3:                       [NSNull null], @"key2",
   4:                       @"value3", @"key3",
   5:                       nil];

Cocoa의 Collection 객체는 관례상 nil 값을 허용하지 않는다. 실제 [NSNull null]의 값도 nil과는 다르므로, Collection 내부의 값이 nil인지 아닌지 평가할 경우에도 NSNull 객체를 사용해서 평가해야 한다.