2013-03-08 2 views
0

저는 Objective C 및 Xcode 신참자이며 한 번에 한 단계 씩 배우려고합니다. 며칠 동안 특정 문제에 대한 내 머리를 긁적이고 해결책을 찾는 데 어려움을 겪고 있습니다. 피커를 채우기 위해 사전을 사용하는 UIPickerVIew 앱을 만들고 있습니다. arrayStates는 왼쪽 구성 요소로 들어가는 상태이고 arrayCities는 State의 키인 해당 상태에있는 도시입니다. 도시는 올바른 구성 요소로 이동합니다. 문제가 코드 블록으로 좁혀 졌다고 생각합니다. 선택기가 충돌하는 값으로 채울 때입니다. 이 코드 블록을 주석 처리 할 수 ​​있으며 선택기에서 텍스트로 물음표가있는 경우에만 실행됩니다. 이 오류를 얻을 :UIPickerView NSInvalidArgumentException ', [reason :'- [__ NSCFString superview] : 인스턴스로 보낸 인식 할 수없는 선택자

다음
-(UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent: (NSInteger)component reusingView:(UIView *)view { 

if (component == 0) { 
    return [arrayStates objectAtIndex:row]; 
} 
else { 
UILabel *lblCity=[[UILabel alloc] initWithFrame:CGRectMake(5,0,220,50)]; 
lblCity.text= [arrayCities objectAtIndex:row]; 
lblCity.backgroundColor = [UIColor clearColor]; 
lblCity.font = [UIFont boldSystemFontOfSize:18]; 
return lblCity; 
} 

} 

내가 내 코드를 변경하고 큰 실행중인 것입니다 :

여기
NSInvalidArgumentException', reason: '-[__NSCFString superview]: unrecognized selector sent to instance 

이 오류의 원인이 내하는 .m 파일에서 코드의 블록입니다! 빠르고 정확한 답변 주셔서 감사합니다 !!

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 

{ 

if (component == 0) 
{ 
    return [arrayStates objectAtIndex:row]; 
} 
else 
{ 
    return [arrayCities objectAtIndex:row]; 
} 

} 

답변

1

구성 요소가 0 인 경우 문자열을 반환하기 때문에이 오류가 발생합니다. 아마도 viewForRow 대신 pickerView : titleForRow : forComponent :를 사용하고 배열에서 문자열을 반환하는 것이 좋습니다. 도시를위한 레이블을 만든다.

+0

굉장! 너 돈 맞았 어. 정말 고맙습니다! 내 업데이트 된 코드를 게시하고 실행 중입니다! – hansoac

0

는 무슨 오류가 의미하는 것은 당신이 UIView 기반 클래스를 통과해야 NSString 기반 클래스를 전달하는 것입니다.

여기에 실제로 표시되는 내용이 표시되지 않으므로이 내용을 기대합니다. return [arrayStates objectAtIndex:row]. arrayStates에 충돌이있는 UIView가 포함되어 있지 않으면 UIView를 반환해야합니다. 어떻게 그리고 어디에서 수정 했습니까? 조금 더 복잡 할 수 있습니다.

+0

이 답변은 엄청난 도움이되었습니다. 귀하의 의견을 보내 주셔서 감사합니다! – hansoac