为什么我的UIPickerView崩溃了? [英] Why Is My UIPickerView Crashing?

查看:44
本文介绍了为什么我的UIPickerView崩溃了?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

使用UIPickerView加载视图时出现以下错误:

i am getting the following error when I load the view with my UIPickerView:

* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[[NSCFNumber isEqualToString:]:无法识别的选择器已发送到实例0x5906000'

* Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSCFNumber isEqualToString:]: unrecognized selector sent to instance 0x5906000'

这是我所有与选择器相关的代码:

Here is all my code related to the picker:

-(void)viewDidLoad:
NSMutableArray * array = [[NSMutableArray alloc] initWithCapacity:700];
    for ( int i = 1 ; i <= 100 ; i ++ )
        [array addObject:[NSNumber numberWithInt:i]];
    weightArray = array;
    //[array release];

 #pragma mark - Weight Picker 
    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView 
    {
        return 1;
    }

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

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

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

       // NSLog(@"Selected Color: %@. Index of selected color: %i", [weightArray objectAtIndex:row], row);
    }

更新

- (UIView *)pickerView:(UIPickerView *)pickerView viewForRow:(NSInteger)row forComponent:(NSInteger)component reusingView:(UIView *)view
{
    if (thePickerView.tag==1)
    {
        //float weight = [[pickerArray objectAtIndex:row] intValue];
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 37)];
        float weight = [[pickerArray objectAtIndex:row] floatValue];
        label.text = [NSString stringWithFormat:@"%f lb", weight];
        //label.text = [NSString stringWithFormat:@"%f lb", weight];
        label.textAlignment = UITextAlignmentCenter;
        label.backgroundColor = [UIColor clearColor];
        label.font = [UIFont systemFontOfSize:30];
        [label autorelease];
        return label;
    }

    else
    {
        int reps = [[pickerArray objectAtIndex:row] intValue];
        UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 300, 37)];
        label.text = [NSString stringWithFormat:@"%d reps", reps];
        label.textAlignment = UITextAlignmentCenter;
        label.backgroundColor = [UIColor clearColor];
        label.font = [UIFont systemFontOfSize:30];
        [label autorelease];
        return label;
    }
}

推荐答案

Faisal,我认为问题出在

Faisal, I think problem lies

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

在上述方法中... weightArray是NSNumber的数组.并且您将其视为字符串,您应该尝试遵循

in above method... weightArray is array of NSNumber. and you are treating it as string you should rather try following

- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
    {
        int weight = [[weightArray objectAtIndex:row] intValue];
        NSString *pickerTitle = [NSString stringWithFormat:@"%d",weight];
        return pickerTitle;
    }

关于选择器方法

 #pragma mark - Weight Picker 
    - (NSInteger)numberOfComponentsInPickerView:(UIPickerView *)thePickerView 
    {
       use like this...
       if(thePickerView.tag==1)
       {
        return 1;
       }
      else if(thePickerView.tag==2)
       {
        return 2; //just for example...
       }
      else 
        return 1;
    }

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

    - (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component 
    {
        if(thePickerView.tag==1)
        {
          return [weightArray objectAtIndex:row];
        }
         else if(thePickerView.tag==1)
        {
          return ;//your other value and so on.....
        }
    }

谢谢

这篇关于为什么我的UIPickerView崩溃了?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆