2014-04-24 2 views
0

저는 Xcode와 Obj-C 프로그래밍에 대해 매우 새롭기 때문에 미리 사과드립니다.값을 변경하는 pickerview에서 JSON 사용하기

이 사이트와 다른 일부를 사용하여 첫 번째 구성 요소에서 옵션 중 하나를 선택하면 첫 번째 구성 요소에서 선택한 옵션과 관련된 옵션을 표시하도록 두 번째 구성 요소가 자동으로 변경되는 두 구성 요소가 함께 선택기를 구성했습니다. 구성 요소. 내가 일하는 예제 선택기보기는 해당 국가의 국가 및 풋볼 클럽을 사용합니다. 첫 번째 구성 요소에서 잉글랜드를 선택하면 두 번째 구성 요소에 영어 팀 목록이 표시됩니다. 첫 번째 구성 요소에서 스페인을 선택하면 두 번째 구성 요소 등에서 스페인어 팀 목록을 얻을 수 있습니다.

현재이 모든 국가와 팀은 모두 Xcode 내에서 하드 코딩됩니다. 내가 할 일은 MySQL 데이터베이스에 저장된이 카운티와 팀을 만든 다음 php를 사용하여이 레코드를 앱에 전송하는 것입니다. 그런 다음이 json 레코드를 배열로 사용하여 피커 뷰에 표시하려고합니다.

나는 앱에 json 데이터를 가져 오는 데 아무런 문제가 없지만 앱에서 피커 뷰와 함께 json을 사용할 때 문제가 발생합니다. 내가 JSON 배열 작업 할 피커보기를 점점 더 운이 없었다, 꽤 실망 얻을 시작하고있다

Heres는 내가 현재 하드 군과 팀과 가진 pickerview에 대한 코드 :

#import "ViewController.h" 

@interface ViewController() 
{ 
NSMutableArray *Nations; 
NSMutableArray *England; 
NSMutableArray *Espana; 
NSMutableArray *Netherlands; 
NSMutableArray *Germany; 
NSMutableArray *Italy; 

// Define keys 
NSString *club; 
} 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 
Nations = [[NSMutableArray alloc]initWithObjects:@"England",@"Espana",@"Netherlands",@"Germany",@"Italy", nil]; 

England=[[NSMutableArray alloc]initWithObjects:@"Arsenal",@"Chelsea",@"Manchester City",@"Manchester United",@"Liverpool",@"Tottenham",@"Fulham City",@"Stoke City",@"Sunderland",@"NewCastle United",@"Blackburn Rovers",@"Southampton",@"Wolvers",@"Aston Villa", nil]; 

Espana = [[NSMutableArray alloc]initWithObjects:@"Barcelona",@"Real Madrid",@"Valencia",@"Athletico Madrid",@"Athletico Balbao",@"Getafe CF",@"Sevilla CF", nil]; 

Netherlands = [[NSMutableArray alloc]initWithObjects:@"Celtics",@"Ajax",@"Amesterdam", nil]; 

Germany = [[NSMutableArray alloc]initWithObjects:@"Bayern Munich",@"Bermen",@"Fiorentina",@"Pampas",@"Nord", nil]; 

Italy = [[NSMutableArray alloc]initWithObjects:@"AC Milan",@"Inter Milan",@"Juventus", nil]; 

} 


- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 2; 
} 

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    if(component ==0) 
    { 
     return [Nations count]; 
    } 
    else { 
     if ([club isEqualToString:@"Espana"]) { 
      return [Espana count]; 
     } 
     if ([club isEqualToString:@"Germany"]) { 
      return [Germany count]; 
     } 
     if ([club isEqualToString:@"Netherlands"]) { 
      return [Netherlands count]; 
     } 
     if ([club isEqualToString:@"Italy"]) { 
      return [Italy count]; 
     } 
     else { 
      return [England count]; 
     } 
    } 

    return 0; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent: (NSInteger)component 
{ 
    if(component ==0) 
    { 
     return [Nations objectAtIndex:row]; 
    } 
    else { 
     if ([club isEqualToString:@"Espana"]) { 
      return [Espana objectAtIndex:row]; 
     } 
     if ([club isEqualToString:@"Germany"]) { 
      return [Germany objectAtIndex:row]; 
     } 
     if ([club isEqualToString:@"Netherlands"]) { 
      return [Netherlands objectAtIndex:row]; 
     } 
     if ([club isEqualToString:@"Italy"]) { 
      return [Italy objectAtIndex:row]; 
     } 
     else { 
      return [England objectAtIndex:row]; 


     } 
    } 

    return 0; 

} 

-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    if (component == 0) { 
     club=[[NSString alloc] initWithFormat:@"%@" , [Nations objectAtIndex:row]]; 
     [pickerView reloadComponent:1]; 
    } 
} 

- (void)didReceiveMemoryWarning 
{ 
    [super didReceiveMemoryWarning]; 
    // Dispose of any resources that can be recreated. 
} 

- (void)dealloc { 
} 

@end 

답변

0

정확히 무슨 일이 일어나고있는거야? 당신의 코드는 절대 좋아 보인다.

UIPickerView을 설정 했습니까?

viewDidLoad 그것은 다음과 같아야합니다

UIPickerView * mainPickerView = [[UIPickerView alloc] init]; 
[mainPickerView setShowsSelectionIndicator:YES]; 
mainPickerView.backgroundColor = [UIColor whiteColor]; 
mainPickerView.dataSource = self; 
mainPickerView.delegate = self; 

datasourcedelegate가 설정되어 있는지 확인합니다. 또한 올바른 프레임이 있는지 확인하십시오. 그리고 UIPickerView이 보이는 경우 서버에서 정보를 가져 오는 작업이 완료되면 [mainPickerView reloadAllComponents];으로 전화하십시오.

언제든지 질문 할 수 있습니다.

그래서 당신은 기본적있는 시간의 90 %가이처럼 보이는있는 NSDictionary하게 될 JSON 서버 응답을 얻기 위해 일부 네트워킹 프레임 워크를 사용하는 사전 내부

NSDictionary *result=[NSJSONSerialization JSONObjectWithData:resultData options:kNilOptions error:&error]; 

을 당신은 실질적으로 NSArrays 일부 개체가 . 기존 NSArrays을 그 (것)들로 바꾸고, UIPicker를 다시 적재하십시오.

+0

위의 코드에 아무런 문제가 없으므로 정상적으로 작동합니다. – user3406608

+0

내가 원하는 것은이 코드를 변경하여 국가 및 팀의 일반 배열 대신 json 데이터를 사용하는 것입니다. 내 문제는 내가 그것에 대해 어떻게 해야할지 모르겠다. – user3406608

+0

@ user3406608 UIPicker의 문제가 아니라 JSON을 파싱하는 것이 문제입니다. 그리고 그것은 다른 대답의 문제입니다. 나는 가능한 빨리 갱신 할 것이다. –

0

다른 배열을 추적하기가 어렵 기 때문에 실망 스럽습니다. 데이터 구조를 사전 중 NSDictionary으로 변경하는 것이 좋습니다. JSON도 똑같이 보입니다.

의 viewDidLoad

- (void)viewDidLoad 
{ 
[super viewDidLoad]; 
// Do any additional setup after loading the view, typically from a nib. 


self.listOfclubs = 
@{ 
@"Nations ":@[@"England",@"Espana",@"Netherlands",@"Germany",@"Italy"] 
@"England":@[@"Arsenal",@"Chelsea",@"Manchester City",@"Manchester United",@"Liverpool",@"Tottenham",@"Fulham City",@"Stoke City",@"Sunderland",@"NewCastle United",@"Blackburn Rovers",@"Southampton",@"Wolvers",@"Aston Villa"], 
@"Espana ":@[@"Barcelona",@"Real Madrid",@"Valencia",@"Athletico Madrid",@"Athletico Balbao",@"Getafe CF",@"Sevilla CF"], 
@"Netherlands":@[@"Celtics",@"Ajax",@"Amesterdam"], 
@"Germany ":@[@"Bayern Munich",@"Bermen",@"Fiorentina",@"Pampas",@"Nord"], 
@"Italy ":@[@"AC Milan",@"Inter Milan",@"Juventus"], 
}; 
} 

numberOfRowsInComponent

- (NSInteger)pickerView:(UIPickerView *)pickerView 
             numberOfRowsInComponent:(NSInteger)component 
{ 
    return [listOfclubs objectForKey:club]; 
} 

titleForRow

- (NSString *)pickerView:(UIPickerView *)pickerView 
        titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    return [[listOfclubs objectForKey:club] objectAtIndex:row]; 
} 

이 코드가 이전 코드와 얼마나 간단하고 융통성이 있는지 살펴보십시오.

관련 문제