2014-07-15 3 views
2

나는 PDF's의 데이터베이스와 함께 작동하는 앱을 제작하려고합니다. 내가 필요한 것은 응용 프로그램이 저장된 모든 파일 (PDF 파일)을보고 특정 파일을 꺼내 데이터베이스에서 확인한 다음 UIPicker에서 사용할 수있는 PDF 목록을 표시하는 것입니다.UIPIckerView에 데이터로드 중?

내 첫 번째 단계는 앱이 파일을 확인하고 디렉토리에 데이터가있는 국가로 채워진 선택기 휠을 생성하는 것입니다.

이 작업을 수행하기 위해 'Country-Airfield-Plate Name-Date.pdf'와 같은 파일 형식의 표준 형식을 만들었습니다. "UK-London Heathrow-ILS DME NDB 27-100214.pdf". '영국 런던 히드로 런던 ILS DME NDB 27'과 'pdf'라는 문자열 두 개를 얻기 위해이 파일 이름을 가장 먼저 분리 한 다음 하이픈에서 'UK', 'London Heathrow' '와'ILS DME NDB 27 '을 포함한다.

앱은 국가 정보의 첫 번째 문자열을 확인한 다음 비행장의 두 번째 문자열을 확인한 다음 해당 비행장의 세 번째 문자열 목록을 표시합니다.

예를 들어 특정 필드에 대해 데이터베이스에서 데이터를 처음 가져올 수 있습니까? 국가에서 NSArray 양식을 작성하고 NSArrayUIPickerView으로로드 한 다음 해당 배열을 UIPickerViewDelegateDatasource 방법으로 사용 하시겠습니까?

+0

노력하고 있습니다 :

그런 다음 다음 UIPickerView 위임 가정 button.tag이 pickerview.tag을 변경하고 pickerview에 대한 올바른 배열을 표시하기 위해 호출됩니다 사용할 수 있습니까? 그렇다면 NSFetchRequest에 NSPredicate와 NSSortDescriptor를 사용하여 원하는 방식으로 결과를 얻을 수 있습니다. – emotality

+0

다양한 PDF 문서로 작업하고 있습니다 (각 문서의 이름은 영국 - 런던 히드로 -ILS DME NDB 27-100214.pdf입니다.) PDF를 검색하여 해당 항목을로드 할 수 있어야합니다. 그에 따라 UIPickerView. 예를 들어 PDF의 첫 번째 인스턴스 (국가)를 살펴본 다음 UIPickerView에 국가를 나열합니다. 사용자가 국가를 선택하면 두 번째 인스턴스 (군)를 가져 와서 이전에 선택한 국가의 UIPickerView를 만들 것입니다. – user3788098

+0

누군가이 문제를 해결하는 방법에 대해 좀 더 밝힐 수 있습니까? NSFetchRequest 캔트에 NSPredicate 및 NSSortDescriptor를 조사해 보았지만 PDF에서 데이터를 가져 오는 방법에 대한 내 머리를 얻는 것처럼 보입니다. 프로세스가 어떻게 작동하는지 예제를 얻은 사람이 있습니까? – user3788098

답변

2

웹 서비스가없고 문서를 직접 처리하는 경우. .plist 파일을 하드 코드하여 웹 사이트에 올릴 수 있으며, 응용 프로그램이 열릴 때마다이 작은 plist 파일을 다운로드하고 암호화하여 문서 디렉토리에 저장할 수 있습니다.

plist는 기본적으로 객체와 키가있는 NSDictionary입니다. 그래서 당신 PLIST 구조는 다음과 같습니다

{ 
    Countries =  (
       { 
      Airfields =    (
           { 
        Code = JNB; 
        Plates =      (
               { 
          Title = "Plate 1"; 
          URL = "http://www.airport.com/za/airfield/plate1/document.pdf"; 
         } 
        ); 
        Title = "OR Tambo"; 
       } 
      ); 
      Title = "South Africa"; 
     } 
    ); 
} 

위의 예는 더 될 것입니다 귀하의 경우 각 배열에서 1 개체를 보유하고 있습니다. 당신이 코어 데이터와

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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component; 
{ 
    return [[self returnCorrectArrayForButton:pickerView.tag] count]; 
} 

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    return [[[self returnCorrectArrayForButton:pickerView.tag] objectAtIndex:row] valueForKey:@"Title"]; 
} 

// Handle these errors where user can click on any button. Airfields will be empty if no country selected. Plates will be empty when no Airfields selected. After loading all arrays, pressing random buttons might give wrong information. 

- (void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component 
{ 
    if (pickerView.tag == 1) { 

     _airfieldArray = [[_countryArray objectAtIndex:row] objectForKey:@"Airfields"]; 
     [_countryButton setTitle:[[_countryArray objectAtIndex:row] valueForKey:@"Title"] forState:UIControlStateNormal]; 

    } else if (pickerView.tag == 2) { 

     _plateArray = [[_airfieldArray objectAtIndex:row] objectForKey:@"Plates"]; 
     [_airfieldButton setTitle:[[_airfieldArray objectAtIndex:row] valueForKey:@"Title"] forState:UIControlStateNormal]; 

    } else if (pickerView.tag == 3) { 

     // Show PDF in webview for selected plate 
     [_plateButton setTitle:[[_plateArray objectAtIndex:row] valueForKey:@"Title"] forState:UIControlStateNormal]; 
     NSString *urlString = [[_plateArray objectAtIndex:row] valueForKey:@"URL"]; 
     NSLog(@"Selected Plate PDF URL : %@", urlString); 
    } 
} 

- (NSArray *)returnCorrectArrayForButton:(NSUInteger)buttonIndex 
{ 
    if (buttonIndex == 1) { 
     // Return Countries array 
     return _countryArray; 

    } else if (buttonIndex == 2) { 
     // Return Airfield array 
     return _airfieldArray; 

    } else if (buttonIndex == 3) { 
     // Return Plates array 
     return _plateArray; 
    } 
    return nil; 
} 
+0

당신은 절대적인 라이브 세이버입니다. – user3788098