2012-11-20 4 views
0

UIPickerView를 성공적으로 설정했지만 데이터가 처음 비어있는 경우 대/소문자를 처리하는 가장 좋은 방법이 궁금합니다. 내 현재 반복을 위해 나는 pickerdelegate빈 배열이있는 UIPickerView

flash_cards = NSMutableDictionary * 

나는 그것을 이동하려고 할 때마다 단지 논리적 인 indexoutofbounds의 오류를 생성

-(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row       forComponent:(NSInteger)component 
{ 
    if ([flash_cards count]) 
    { 
     return [[flash_cards allKeys] objectAtIndex:row]; 
    } 

return @""; 
} 

위해 다음 코드를 사용합니다. 빈 배열의 대소 문자를 처리하려면 어떻게해야합니까?

편집 : 나는 구현 또한

코드의 한 부분으로

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponen: (NSInteger)component 
    { 
    return [flash_cards count]; 

    } 

    #pragma mark Picker Data Source Methods 
    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
    { 
    return 1; 
    } 
+0

** **'NSMutableDictionary'을'사용 STRONG 주 모든 키즈 속성은 위험한 아이디어입니다. 불변 사전의'allKeys' 배열이 매번 같은 순서로 정렬된다는 보장은 없습니다. 'allKeys'를 한 번 호출하여 정렬하고 저장해야합니다. 저장된 배열을 데이터 소스로 사용하십시오. 그런 식으로 누군가가 세 번째 항목을 선택하면 그 저장된 배열의 세 번째 항목은 선택하려는 의미입니다. – NJones

답변

0

이 문제를 해결하려면 아래의 예처럼 UIPickerViewDataSource에서 방법 numberOfRowsInComponent 대신 1 0을 반환해야합니다 :

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    return [self.myArray count] == 0 ? 1 : [self.myArray count]; 
} 
0

당신은 또한 UIPickerViewDataSource 방법을 구현해야합니다 다음

- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 

당신은 여전히 ​​flash_cards을 사용할 수 있습니다 (또는 [flash_cards count]을) 이러한 메서드의 반환 값을 파생; 데이터가 비어있는 경우 0을 반환 한 다음 나중에 데이터가로드되면 선택보기에서 -reloadAllComponents으로 전화 할 수 있습니다. 배열이 비어있을 때

+0

원래 가지고 있던 것을 업데이트했습니다. 배열이 비어있을 때마다 오류가 발생합니다. return [flash_cards count]를 return 0으로 바꾸면 여전히 동일한 오류가 발생합니다. –