2012-05-10 2 views
0

내 mainmenunib 파일에 NSComboBox이 있습니다. 콤보 상자의 콘센트 "cb"을 만들어 내 대리인과 연결했습니다. 대리인과 데이터 소스를 내 대리인과 연결했습니다.코코아의 nscombobox에 데이터를 표시하는 방법은 무엇입니까?

-(void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ arr=[NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f", nil]; 
[cb reloadData]; 
} 

-(NSInteger)numberOfItemsInComboBox:(NSComboBox *)aComboBox{ 
return arr.count; 
} 

-(id)comboBox:(NSComboBox *)aComboBox objectValueForItemAtIndex:(NSInteger)loc{ 
return [arr objectAtIndex:loc]; 
} 

하지만 응용 프로그램 데이터를 실행할 때 콤보 상자에 들어오지 않습니다. 코코아 프로그래밍에 익숙하지 않으니 제발 도와주세요. 미리 감사드립니다.

답변

2

변경 가능한 개체를 인스턴스 변수로 사용하는 것은 종종 불만을 토로하기는하지만 (이 문제와 전혀 관련이없는 이유로이 단계에서는 들어갈 필요가 없습니다) .

가능한 문제로 뛰어 두 가지가 있습니다

한 것은)는 ARC를 사용하고는? 그렇지 않은 경우 -arrayWithObjects은 자동 렌더링 된 객체를 반환하기 때문에 아무 것도 보유하지 않으므로 arr이 당신 아래에서 사라질 것입니다. ARC (새 프로젝트의 기본값 인 Lion)를 사용하는 경우 이는 적용되지 않습니다. 게다가 데이터가 없어지는 것뿐만 아니라 충돌이 발생할 것으로 예상됩니다.

2) NSComboBox에 @JustinBoo가 제공 한 내부 내용 접근 방식을 사용할지 여부를 알려주는 플래그 인 -setUsesDataSource:YES을 잊었을 가능성이 큽니다. 나는이 문제가 귀하의 정확한 문제를 일으킬 수 있다고 생각합니다. 현재 인터페이스 작성기가 없습니다.하지만 IIRC에는이 특성을 사용하도록 설정할 수있는 "데이터 원본 사용"확인란이 있습니다.

1

이처럼 NSComboBox-addItemWithObjectValue를 사용하여 객체를 추가 할 수 있습니다

arr = [NSMutableArray arrayWithObjects:@"a",@"b",@"c",@"d",@"e",@"f", nil]; 

for (int i = 0; i < [arr count]; ++i) 
{ 
    [cb addItemWithObjectValue:[arr objectAtIndex:i]]; 
} 

당신은 자세한 내용은 NSComboBox Reference를 볼 수 있습니다.

+0

이것은 하나의 방법입니다. OP는 데이터 소스 사용에 관심이있는 것 같지만 완벽하게 수용 할 수 있습니다 (틀림없이 더 유연합니다). –

+0

예,이 방법은 간단합니다. – user1295948

관련 문제