NSFetchRequest具有不同的记录和UIPickerView

时间:2012-10-23 20:08:56

标签: ios core-data uipickerview nsfetchrequest

我正在尝试使用fetch的结果填充UIPickerView。我能够做到。由于存在重复项,因此我决定使用以下代码来获取不同的记录,并仅获取所需的属性。代码工作正常,数组array1& dictlevel1有正确的数据(如下所示)。我无法弄清楚如何将array1纳入选择器视图?

    NSError *error;
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Factors" inManagedObjectContext:managedObjectContext];

    [fetchRequest setEntity:entity];
    [fetchRequest setResultType:NSDictionaryResultType];
    [fetchRequest setReturnsDistinctResults:YES];
    [fetchRequest setPropertiesToFetch:@[@"level1"]];

    self.title = @"Factors";
    array1 = [[NSArray alloc] init];
    array1 = [managedObjectContext executeFetchRequest:fetchRequest error:&error]; 
    NSDictionary *dictlevel1 = [array1 dictionaryWithValuesForKeys:[NSArray arrayWithObject:@"level1"]];

    NSLog(@"%@", array1[1]);
    NSLog(@"%@", [dictlevel1 dictionaryWithValuesForKeys:[NSArray arrayWithObject:@"level1"]]);

以下是NSLog的输出:

2012-10-23 14:55:47.774 CoreData2[1477:c07] (
        {
        level1 = "External Combustion Boilers";
    },
        {
        level1 = "Internal Combustion Engines";
    },
        {
        level1 = "Industrial Processes";
    },
        {
        level1 = "Petroleum and Solvent Evaporation";
    },
        {
        level1 = "Waste Disposal";
    },
        {
        level1 = "Stationary Source Fuel Combustion";
    },
        {
        level1 = "Miscellaneous Area Sources";
    },
        {
        level1 = "Mobile Sources";
    },
        {
        level1 = "Solvent Utilization";
    },
        {
        level1 = "Storage and Transport";
    },
        {
        level1 = "Waste Disposal, Treatment, and Recovery";
    },
        {
        level1 = "Natural Sources";
    }
)

2012-10-23 14:55:47.775 CoreData2[1477:c07] {
    level1 =     (
        "External Combustion Boilers",
        "Internal Combustion Engines",
        "Industrial Processes",
        "Petroleum and Solvent Evaporation",
        "Waste Disposal",
        "Stationary Source Fuel Combustion",
        "Miscellaneous Area Sources",
        "Mobile Sources",
        "Solvent Utilization",
        "Storage and Transport",
        "Waste Disposal, Treatment, and Recovery",
        "Natural Sources"
    );
}

2 个答案:

答案 0 :(得分:0)

UITableView非常相似,您必须处理UIPickerViewDataSourceUIPickerViewDelegate协议方法,这些方法为选择器提供数据。有关详细信息,请参阅链接文档。

答案 1 :(得分:0)

我建议使用这样的代码段来为结果字典中的给定键(例如endCalYear)获取不同的结果(@distinctUnionOfObjects):

NSArray *distinctYears = [periodsFilteredByDates
                valueForKeyPath:@"@distinctUnionOfObjects.endCalYear"];

pickerView:numberOfRowsInComponent:中,您可以使用distinctYears.count返回行数,在pickerView:titleForRow:forComponent:中,您可以使用这样的代码段为每个标题返回一个字符串:

NSNumber *endCalYear = distinctResults[row];
NSString *rowTitle = [NSString stringWithFormat:@"%@",endCalYear];
return rowTitle;