2013-02-26 10 views
10

을 만들 때 "개체에서 전무 개체를 삽입하는 시도 [1]"정의는 제목이 다음 코드를 사용하여 속성입니다 : 때, 그러나아이폰 OS : 나는 사용자 정의 탐색 모음 클래스를 생성하고있어 사전

self.titleTextAttributes = @{ UITextAttributeFont: bariol, 
           UITextAttributeTextColor: [UIColor whiteColor] 
          }; 

를 I 코드를 실행, 그것은 다음과 같은 오류 메시지가 반환

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[1]' 

내가 사용하는 아이폰 OS 6

답변

6

리터럴의 매개 변수를 엑스 코드 4.6을 사용하여 장치에서 실행 해요를 (값의 키 당신의 사전)은 nil이 아니어야합니다.

덜 엄격한 생성자를 선호하는 경우 대신 +[NSDictionary dictionaryWithObjectsAndKeys:]을 사용하는 것이 좋습니다.

+11

덜 엄격하지는 않지만 키가 예상되는 곳에 'nil'이 발견되면 인수가 중지되었다고 생각합니다. 특히'nil' 객체를 전달하면 똑같은 예외가 발생합니다. –

+0

@KevinBallard 말도 안돼. '[NSDictionary dictionaryWithObjectsAndKeys : @ "a", @ "a", nil, @ "b", nil]; 첫 번째 nil 객체 인수에서 읽기를 중지합니다. – justin

+0

미안 열쇠를 말할 때 나는 물건을 의미했다. 'nil' 객체와 센티넬'nil'을 구분할 수 없습니다. 키에'nil'을 사용하고'NSDictionary dictionaryWithObjectsAndKeys : @ "anObj", @ "aKey", @ "anotherObj", nil, nil]'키를 ​​보자. –

9

bariol 개체가 nil 인 것 같습니다. 사전에 nil을 저장할 수 없습니다.

편집 : 사실

, 당신이 그 코드의 오른쪽 라인 확실하다? 오류는 NSPlaceholderArray을 나타내며 리터럴에 문제가 있음을 나타내며 @{} 리터럴은 아닙니다.

+0

@justin :'dictionaryWithObjects : forKeys : count :'NSArray's를 사용하지 않습니다. C 배열을 사용합니다. –

+0

whoops - nonsense returned :) NSArrays가 사전 구성 (또는 다른 생성자 호출) 과정에서 생성되므로 예외 메시지가 여전히 가능합니다. – justin

+0

@justin :'NSDictionary' 리터럴은 중간 NSArray를 생성하지 않습니다. 그래서'-setTitleTextAttributes :'가 뭔가 펑키하고있는 것이 아니라면 그렇지 않습니다. –

3

이 오류는 다른 위치에있는 것 같습니다. 그것은 '1'개체에서 배열 오류를 가리키고 있습니다. 귀하의 경우에는 사전과 객체 '1'은 UITextAttributeTextColor: [UIColor whiteColor]입니다. 결코 0이 아닙니다.

+7

예, 예외 메시지에서 []을 확인하려고하는 사람들은 실패한 (nil) 객체의 0 인덱싱 된 배열 오프셋입니다. 테스트 대상 : NSString * str = nil; NSDictionary * foo = @ {NSFontAttributeName : str, NSForegroundColorAttributeName : @ "booboo"}; – robm

+1

@robm 붐! 좋은 것. – Benjohn