2012-11-10 17 views
-1

我试图使用array = [[NSArray alloc] [email protected]"1",@"1.2"[email protected]"50.0",nil]填充UIPickerView。但问题是,一旦我在TabBarController中单击它,视图就会自动崩溃。另外,这涉及很多工作。什么是最优雅的方式来实现这一目标?如何以最优雅的方式将UIPickerView从1.0添加到50.0?

更新:这是代码崩溃的错误 - “lldb”的视图。你能告诉我这个问题吗?

- (void)viewDidLoad 
{ 

    kms = [[NSArray alloc] initWithObjects:@"1",@"1.1",@"1.2",@"1.3",@"1.4",@"1.5",@"1.6",@"1.7",@"1.8",@"1.9",@"2.0",@"2.1",@"2.2",@"2.3",@"2.4",@"2.5",@"2.6",@"2.7",@"2.8",@"2.9",@"3.0",@"3.1",@"3.2",@"3.3",@"3.4",@"3.5",@"3.6",@"3.7",@"3.8",@"3.9",@"4.0",@"4.1",@"4.2",@"4.3",@"4.4",@"4.5",@"4.6",@"4.7",@"4.8",@"4.9",@"5.0",@"5.1",@"5.2",@"5.3",@"5.4",@"5.5",@"5.6",@"5.7",@"5.8",@"5.9",@"6.0",@"6.1",@"6.2",@"6.3",@"6.4",@"6.5",@"6.6",@"6.7",@"6.8",@"6.9",@"7.0",@"7.1",@"7.2",@"7.3",@"7.4",@"7.5",@"7.6",@"7.7",@"7.8",@"7.9",@"8.0",@"8.1",@"8.2",@"8.3",@"8.4",@"8.5",@"8.6",@"8.7",@"8.8",@"8.9",@"9.0",@"9.1",@"9.2",@"9.3",@"9.4",@"9.5",@"9.6",@"9.7",@"9.8",@"9.9",@"10.0",@"10.1",@"10.2",@"10.3",@"10.4",@"10.5",@"10.6",@"10.7",@"10.8",@"10.9",@"11.0",@"11.1",@"11.2",@"11.3",@"11.4",@"11.5",@"11.6",@"11.7",@"11.8",@"11.9",@"12.0",@"12.1",@"12.2",@"12.3",@"12.4",@"12.5",@"12.6",@"12.7",@"12.8",@"12.9",@"13.0",@"13.1",@"13.2",@"13.3",@"13.4",@"13.5",@"13.6",@"13.7",@"13.8",@"13.9",@"14.0",@"14.1",@"14.2",@"14.3",@"14.4",@"14.5",@"14.6",@"14.7",@"14.8",@"14.9",@"15.0",@"15.1",@"15.2",@"15.3",@"15.4",@"15.5",@"15.6",@"15.7",@"15.8",@"15.9",@"16.0",@"16.1",@"16.2",@"16.3",@"16.4",@"16.5",@"16.6",@"16.7",@"16.8",@"16.9",@"17.0",@"17.1",@"17.2",@"17.2",@"17.3",@"17.4",@"17.5",@"17.6",@"17.7",@"17.8",@"17.9",@"18.0",@"18.1",@"18.2",@"18.3",@"18.4",@"18.5",@"18.6",@"18.7",@"18.8",@"18.9",@"19.0",@"19.1",@"19.2",@"19.3",@"19.4",@"19.5",@"19.6",@"19.7",@"19.8",@"19.9",@"20.0",@"20.1",@"20.2",@"20.3",@"20.4",@"20.5",@"20.6",@"20.7",@"20.8",@"20.9",@"30.0",@"31.1",@"31.2",@"31.3",@"31.4",@"31.5",@"31.6",@"31.7",@"31.8",@"31.9",@"32.0",@"32.1",@"32.2",@"32.3",@"32.4",@"32.5",@"32.6",@"32.7",@"32.8",@"32.9",@"33.0",@"33.1",@"33.2",@"33.3",@"33.4",@"33.5",@"33.6",@"33.7",@"33.8",@"33.9",@"34.0",@"34.1",@"34.2",@"34.3",@"34.4",@"34.5",@"34.6",@"34.7",@"34.8",@"34.9",@"35.0",@"35.1",@"35.2",@"35.3","@35.4",@"35.5",@"35.6",@"35.7",@"35.8",@"35.9",@"36.0",@"36.1",@"36.2",@"36.3",@"36.4,"@"36.5",@"36.6",@"36.7",@"36.8",@"36.9",@"37.0",@"37.1",@"37.2",@"37.3",@"37.4",@"37.5",@"37.6",@"37.7",@"37.8",@"37.9",@"38.0",@"38.1",@"38.2",@"38.3",@"38.4",@"38.5",@"38.6",@"38.7",@"38.8",@"38.9",@"40.0",@"40.1",@"40.2",@"40.3",@"40.4",@"40.5",@"40.6",@"40.7",@"40.8",@"40.9",@"41.0",@"41.1",@"41.2",@"41.3",@"41.4",@"41.5",@"41.6",@"41.7",@"41.8",@"41.9",@"42.0",@"42.1",@"42.2",@"42.3",@"42.4",@"42.5",@"42.6",@"42.7",@"42.8",@"42.9",@"43.0",@"43.1",@"43.2",@"43.3",@"43.4",@"43.5",@"43.6",@"43.7",@"43.8",@"43.9",@"44.0",@"44.1",@"44.2",@"44.3",@"44.4",@"44.5",@"44.6",@"44.7",@"44.8",@"44.9",@"45.0",@"45.1",@"45.2",@"45.3",@"45.4",@"45.5",@"45.6",@"45.7",@"45.8",@"45.9",@"46.0",@"46.1",@"46.2",@"46.3",@"46.4",@"46.5",@"46.6",@"46.7",@"46.8",@"46.9",@"47.0",@"47.1",@"47.2",@"47.3",@"47.4",@"47.5",@"47.6",@"47.7",@"47.8",@"47.9",@"48.0",@"48.1",@"48.2",@"48.3",@"48.4",@"48.5",@"48.6",@"48.7",@"48.8",@"48.9",@"49.0",@"49.1",@"49.2",@"49.3",@"49.4",@"49.5",@"49.6",@"49.7",@"49.8",@"49.9",@"50.0",nil]; 



    [super viewDidLoad]; 
    // Do any additional setup after loading the view. 
} 







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

- (NSInteger) pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 

     return kms.count; 

    } 





- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 



     return [kms objectAtIndex:row]; 
    } 




-(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component { 

     [kms objectAtIndex:row]; 

    } 
+0

有关如何填充选取器视图的想法,请参阅http://stackoverflow.com/questions/4020081/most-effective-way-to-populate-a-picker-view-with-range-of-integers。什么错误信息到底是什么意思? – Anna

+0

这似乎在工作。但我怎么能开始填充数据从1.0(浮点数)到50.0?例如1.0,1.1,1.2 ... 1.9,2.0等 –

+0

只需将范围设置为10至500(相同数量的值为1.0至50.0,以0.1为增量)并将该字符串显示为'(row + PICKER_MIN)/ 10.0'格式设置为'%0.1f'。 – Anna

回答

1

设置你的类是UIPickerView的委托和数据源,然后实现这些方法:

@synthesize pickerView, entries; 

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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component 
{ 
    return [entries count]; 
} 

- (NSString*) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
{ 
    return [entries objectAtIndex: row]; 
} 

@end 

哪里条目是包含数组中的所有格式numbers.If你也想知道为什么你的应用程序崩溃,发布代码。

编辑

关于填充视图:在视图中并加载方法开始填充约推值到选择器视图的array.Don't担心,它们会被自动加载:

entires=[NSMutableArray new]; 
for(float i=1.0; i<=50.0; i+= 0.1) 
{ 
    NSString* pushString=[NSString stringWithFormat: @"%f",i]; 
    [entries addObject: pushString]; 
} 

这使得选择器视图显示1.0,1.1,1.2,1.3,等...

+0

我已经实现了所有委托方法。但我怎么能开始填充数据从1.0(浮点数)到50.0?例如1.0,1.1,1.2 ... 1.9,2.0等 –

1

如果“优雅”,你的意思是一个简单的方法,而不填充一个数组,然后做到这一点:

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

- (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent:(NSInteger)component { 
    return 500 - 10 + 1; // 1.0 to 50.0 is 491 total rows 
} 

- (NSString*) pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component { 
    // row 0 becomes 1.0, row 1 becomes 1.1, etc. 
    float num = row/10.0 + 1.0; 

    return [_formatter stringFromNumber:@(num)]; 
} 

- (Void)viewDidLoad { 
    [super viewDidLoad]; 

    // _formatter is an NSNumberFormatter * ivar 
    _formatter = [[NSNumberFormatter alloc] init]; 
    [_formatter setNumberStyle: NSNumberFormatterDecimalStyle]; 
    [_formatter setMaximumFractionDigits:1]; 
} 

数字格式化程序用于确保为用户的区域设置正确格式化小数。

+0

你能告诉我数组的问题吗?我用代码更新了这个问题。 –

+0

这里'num'是什么? –

+0

'num'是将为该行显示的数字。 – rmaddy

相关问题