2014-03-13 2 views
0

어제부터 매우 작은 문제가있었습니다. Projects 및 기타 Benefits와 함께 하나의 데이터베이스에 2 개의 테이블이있었습니다. Single PickerView Component에 두 개의 테이블 데이터를 추가하려고합니다. 예를 들어, 프로젝트에는 pro1, proj2, proj3이 있고 Benefits 테이블에는 benefits1, benefits2가 있습니다. 그래서 하나의 PickerView 구성 요소에 두 개의 프로젝트 테이블 dat 및 Benefits 테이블 데이터를 추가하려고합니다.UIPickerView의 단일 구성 요소에 두 구성 요소를 추가합니다.

-(void)loadprojects 
    { 

     NSString *post =[[NSString alloc] initWithFormat:@"username=%@",[self.projectpicker dataSource]]; 

     // Code for Project loading 
     NSString * BenefitString [email protected]"http://test.com/GetBenefitTypes"; 

     NSURL *Benefiturl = [NSURL URLWithString:BenefitString]; 

     NSString *projecturltemp = @"http://test.com/GetAssignedProjects"; 
     NSString *str = [[NSUserDefaults standardUserDefaults] valueForKey:@"UserLoginIdSession"]; 
     NSString *usrid = str; 
     NSString * projecturl =[NSString stringWithFormat:@"%@/%@",projecturltemp,usrid]; 


     NSURL *url = [NSURL URLWithString:projecturl]; 

     NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 




     NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]]; 
     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
     [request setURL:Benefiturl]; 
     [request setURL:url]; 
     [request setHTTPMethod:@"POST"]; 
     [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
     [request setValue:@"application/projectpicker" forHTTPHeaderField:@"Accept"]; 
     [request setValue:@"application/jsonArray" forHTTPHeaderField:@"Content-Type"]; 
     [request setHTTPBody:postData]; 


     NSError *error = [[NSError alloc] init]; 
     NSHTTPURLResponse *response = nil; 
     NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
     NSURLRequest *urlRequest = [NSURLRequest requestWithURL:url 
                cachePolicy:NSURLRequestReturnCacheDataElseLoad 
               timeoutInterval:30]; 
     NSURLRequest *urlRequestBenifits = [NSURLRequest requestWithURL:Benefiturl 
                cachePolicy:NSURLRequestReturnCacheDataElseLoad 
               timeoutInterval:30]; 


     // Make synchronous request 
     urlData = [NSURLConnection sendSynchronousRequest:urlRequest 
             returningResponse:&response 
                error:&error]; 
     urlData = [NSURLConnection sendSynchronousRequest:urlRequestBenifits 
                returningResponse:&response 
                   error:&error]; 
     if ([response statusCode] >= 200 && [response statusCode] < 300) 
     { 
      NSString *responseData = [NSJSONSerialization JSONObjectWithData:urlData 
                    options:NSJSONReadingAllowFragments error:&error]; 

      NSArray *entries = [NSJSONSerialization JSONObjectWithData:[responseData dataUsingEncoding:NSUTF8StringEncoding] 
                   options:0 error:&error]; 
      if(!entries) 
      { 
       NSLog(@"Error : %@", error); 
      } 
      else{ 

       for (NSDictionary *entry in entries) { 
        projID = [entries valueForKey:@"ID_PROJECT"]; 
        projectNames = [entries valueForKey:@"NM_PROJECT"]; 
        BenefitsNames = [entries valueForKey:@"NM_LEAVES"]; 
       } 
       //Combined = [BenefitsNames arrayByAddingObjectsFromArray:projectNames]; 
       NSLog(@"Combined : %@", projectNames); 
       //NSLog(@"projID : %@", projID); 
       _projectpicker.delegate = self; 
       _projectpicker.dataSource = self; 
      } 

     }  else { 

     } 
    } 
+0

왜 두 가지 구성 요소를 사용하지 않습니까? 지금까지 무엇을 시도 했습니까? 무엇이 효과가 없었습니까? – Wain

+0

필자는 pickerview에 세 가지 구성 요소가 있었으므로이 구성 요소와 프로젝트를 하나의 구성 요소에 추가하려고합니다. – user3401290

+0

모든 구성 요소의 모든 데이터를로드 할 수 있었지만이 이점을 구성 요소에있는 프로젝트 구성 요소에 추가하려고합니다 1 – user3401290

답변

0

NSArray 사례가 있습니까? 그렇다면 왜 그것들을 하나의 배열로 합치는 것이 아니라 앞으로 나아갈 것인가?

NSArray *projects = @[@"pro 1", @"pro 2"]; 
    NSArray *benefits = @[@"benefit 1", @"benefit 2"]; 

    NSArray *combined = [projects arrayByAddingObjectsFromArray:benefits]; 

    NSLog(@"Combined: %@", combined); 

결합 인쇄 아웃 :

Combined: (
    "pro 1", 
    "pro 2", 
    "benefit 1", 
    "benefit 2") 

이 그런 다음 - (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 방법에 그냥 내 이해에 [combined objectAtIndex:row];

+0

우리는 매우 가까이에 있었지만 어디가 잘못되었는지 잘 모릅니다. 코드를 편집 해주세요. – user3401290

0

enter image description here

기지를 반환, 당신 싶어 위의 같은이? 나 맞아? 그래서 UIPickerView에 여러 구성 요소가 있습니까?

그렇다면, 1 일, 당신은 당신의 ViewController에 대표단을 설정해야합니다 ->

<UIPickerViewDataSource, UIPickerViewDelegate> 

은 당신이 당신의 ViewController.m 파일에 다음과 같은 방법을 구현 : (나는 당신이 가정 "있는 NSArray * 데이터를 "프로젝트 및 혜택 준비 ...)

//Number of rows to display in each component 
-(NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    if (component==0) { 
     return [self.listOfProjectsOfLeftCol count]; 
    } 
    return [self.listOfBenefitsOfRightCol count]; 
} 

//Number of columns to display 
- (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView 
{ 
    return 2; 
} 

//define what to display in each rows and columns 
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    if (component==0) { 
     return [self.listOfProjectsLeftCol objectAtIndex:row]; 
    } 
    return [self.listOfBenefitsOfRightCol objectAtIndex:row]; 
} 

//when the row is selected , do something... 
- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    if (component==0) { 

     //selected items in left column, now write your own code to do something... 

    } 

    else { 
      //selected items in right column, now write your own code to do something... 
    } 
} 
+0

Seph 당신이 나에게 착각 한 적이 없습니다. 구성 요소 1의 데이터와 구성 요소 2의 데이터를 투영합니다.이 두 가지 이점을 원하고 하나의 구성 요소에 데이터를 투영합니다. – user3401290

0

두 구성 요소를 하나로 결합한다는 것은 무엇을 의미합니까?

는하지만 난 당신이 프로젝트로 프로젝트와 혜택의 조합을 원하는 것 같아요 : 유 코드

NSArray *arrProject=[NSArray arrayWithObjects:@"Project1",@"Project2",nil]; 
    NSArray *arrBenefits=[NSArray arrayWithObjects:@"Benefits1",@"Benefits2",nil]; 

    NSMutableArray *arrCombined=[[NSMutableArray alloc]init]; 
    for(int i=0;i<[arrProject count];i++) 
    { 
     [arrCombined addObject:[NSString stringWithFormat:@"%@:%@",[arrProject objectAtIndex:i],[arrBenefits objectAtIndex:i]]]; 
    } 
    NSLog(@"Combined:%@",arrCombined); 

그 다음 사용할 수 있도록하면 혜택

는 :( 결합

대로 결과 제공 "Project1 : Benefits1", "Project2 : Benefits2" )

날짜 선택 도구 데이터 소스에 arrCombined 사용

관련 문제