2012-10-23 39 views
2

我是iOS编程的新手,我试图用提取结果填充UIPickerView。我能够做到。由于有重复,我决定使用下面的代码来获取不同的记录,只有所需的属性。代码工作正常,数组array1 & dictlevel1有正确的数据(如下所示)。我无法弄清楚如何将array1置入选取器视图?任何帮助将非常感激。带有不同记录和UIPickerView的NSFetchRequest

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" 
    ); 
} 
+0

快速代码注释:您不需要此初始化行:'array1 = [[NSArray alloc] init];'。你将从'executeFetchRequest:error:'返回一个NSArray实例。如果你没有使用ARC,你也在泄漏该初始化数组。 –

+0

感谢您的提示。我会在我的代码中改变它。 – Sriki

回答

0

就像一个UITableView,你必须处理UIPickerViewDataSourceUIPickerViewDelegate协议的方法,其中提供选择器与它的数据。有关详细信息,请参阅链接的文档。

此外,here's a beginner's tutorialUIPickerView

+0

我用过那个。 UIPickerView正常工作正常。我的麻烦出现了,因为数据存储中存在重复项,所以我只想获取唯一值。所以,我使用'NSDictionaryResultType'并只提取我需要的列。返回的结果是不同的(Dictionary type?),我不能在UIPickerView方法中使用它。 – Sriki

0

我会建议使用这样的代码片段,以获得在结果字典给定的键不同的结果(@distinctUnionOfObjects)(例如endCalYear):

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

pickerView:numberOfRowsInComponent:然后你可以返回distinctYears.countpickerView:titleForRow:forComponent:的行数,你可以使用这样的代码片段为每个标题返回一个字符串:

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