【问题标题】:Loading Data into UIPIckerView?将数据加载到 UIPIckerView?
【发布时间】:2014-09-05 11:42:10
【问题描述】:

我正在尝试构建一个与PDF's 数据库一起工作的应用程序。我需要让应用程序查看所有存储的文件(PDF)并将某些文件拉出,对照数据库检查,然后在UIPicker 上显示可用的 PDF 列表。

我的第一步是应用程序检查文件并创建一个选择器轮盘,该轮盘已填充了目录中有数据的国家/地区。

为了完成这项工作,我为文件名创建了一个标准格式:“Country-Airfield-Plate Name-Date.pdf”,例如“英国-伦敦希思罗机场-ILS DME NDB 27-100214.pdf”。我首先在句号处拆分此文件名以获得两个字符串:“UK-London Heathrow-ILS DME NDB 27”和“pdf”,然后我们在连字符处拆分标题以获得“UK”、“London Heathrow” ' 和 'ILS DME NDB 27'。

应用程序将检查国家信息的第一个字符串,然后检查机场的第二个字符串,然后显示相应机场的第三个字符串的列表。

我如何首先从数据库中获取特定字段的数据,例如。国家/地区创建一个NSArray 表单该数据并将该NSArray 加载到UIPickerView,然后在UIPickerView DelegateDatasource 方法中使用该数组?

【问题讨论】:

  • 您在使用 Core Data 吗?如果是这样,您可以将 NSPredicate 和 NSSortDescriptor 用于您的 NSFetchRequest 并以您想要的方式获得结果。
  • 我正在处理一系列不同的 PDF 文档(每个文档都有不同的名称,即 UK-London Heathrow-ILS DME NDB 27-100214.pdf)我需要该应用程序来搜索 PDF 并且能够相应地在 UIPickerView 上加载正确的。例如,它会查看 PDF 的第一个实例(国家),然后在 UIPickerView 上列出国家。一旦用户选择了国家,它将采用第二个实例(县)并为所需的国家创建一个县的 UIPickerView,尽管之前已选择。
  • 有人能详细说明如何解决这个问题吗?我查看了 NSPredicate 和 NSSortDescriptor 到您的 NSFetchRequest 似乎无法理解它将如何从 PDF 中获取数据。有没有人举例说明这个过程是如何工作的?

标签: ios delegates datasource uipickerview


【解决方案1】:

如果您没有任何 Web 服务运行并且您自己处理文档。您可以硬编码一个 .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 个对象,在您的情况下会更多。

然后使用下面的UIPickerView委托假设button.tag被调用来改变pickerview.tag并为pickerview显示正确的数组:

- (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;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-27
    • 1970-01-01
    • 2012-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多