0

嗨,我在将图像添加到按钮时遇到问题。图像存储在 NSMutableArray 属性中。问题是将图像添加并显示到按钮。我已验证图像已添加到数组中。从相机拍摄图像后,我选择使用它应用程序将崩溃并出现以下错误:

*由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[UIImage 长度]:无法识别的选择器发送到实例 0x2090b5a

代码:

displayArray=[[NSMutableArray alloc]initWithObjects:@"MedsTime_MedPic.png",@"",@"",@"", nil];

-(void)addImage1:(NSNotification*)notify
{
    butImage=xapp.medicineImage;
    [img setImage:xapp.medicineImage forState:UIControlStateNormal];
    [displayArray replaceObjectAtIndex:0 withObject:xapp.medicineImage ];
    [table reloadData];
}



- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier];

    }
    else
    {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier];
    }

    if (indexPath.section==0)
    {
        img=[UIButton buttonWithType:UIButtonTypeRoundedRect];
        img.frame=CGRectMake(25, 15, 75, 75);
        img.layer.cornerRadius=6.0;
        img.clipsToBounds=YES;
        img.layer.borderColor=[[UIColor grayColor]CGColor];
        [cell.contentView addSubview:img];
        if (xapp.isEdited==YES)
        {

        }
        else if (xapp.isEdited==NO)
        {
            [img setImage:[UIImage imageNamed:[displayArray objectAtIndex:0]] forState:UIControlStateNormal];

        }

        [cell.contentView addSubview:img];

        img.titleLabel.textColor=[UIColor blackColor];
        text=[[UITextField alloc]initWithFrame:CGRectMake(105, 30, 200, 30)];
        text.delegate=self;
        text.placeholder=@"Enter Medicine First";

        if (xapp.isEdited==YES)
        {
            text.text=[[editArray objectAtIndex:0]valueForKey:@"medicineName"];
        }
        else{

            text.text=[displayArray objectAtIndex:1];
        }


        [text setBorderStyle:UITextBorderStyleRoundedRect];
        [cell addSubview:text];
        [cell addSubview:img];


    }
}
4

3 回答 3

0

您应该知道您不能将图像添加到UIButtonTypeRoundedRect,您应该将其更改为自定义按钮。

在此函数中,您将显示数组的第一项替换为图像,而显示数组中的其他项是 nsstrings,这似乎是问题的根源:

-(void)addImage1:(NSNotification*)notify
{
    butImage=xapp.medicineImage;
    [img setImage:xapp.medicineImage forState:UIControlStateNormal];
    [displayArray replaceObjectAtIndex:0 withObject:xapp.medicineImage ];
    [table reloadData];
}

除了您的代码中我不理解的某些部分。有一些明显的错误:

这部分与 uitableview 约定冲突,您可以将其删除而不会出错。

else
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier];
}

您将“img”添加到 contentView 两次,一次就足够了。

于 2013-03-20T12:58:07.753 回答
0

您(或 sdk 中的某些方法)要求图像执行该方法length

原因:' -[UIImage 长度]:无法识别的选择器发送到实例 0x2090b5a

AnUIImage没有方法长度。根据文档,这是NSString和/或的方法UIAElementArray

我的猜测是您正在使用 a NSStringorUIAElementArray预期的图像。

于 2013-03-20T12:59:28.900 回答
0

替换您的代码。添加一个新数组然后检查。希望它对您有用。

if (xapp.isEdited==YES)
         {
             CamImage*eventImage = (CamImage*)[editArray objectAtIndex:0];
             [img setImage:[eventImage valueForKey:@"medicineImage"] forState:UIControlStateNormal];
             }

       else if (xapp.isEdited==NO)
           NSLog(@"editedmo");
         {
             if(Medimage==NO){
                 UIImage *i=(UIImage*)[displayArray objectAtIndex:0];
                 [img setImage:i forState:UIControlStateNormal];
            [img setImage:[UIImage imageNamed:[displayArray objectAtIndex:0]] forState:UIControlStateNormal];
                 }
于 2013-03-21T02:29:08.977 回答