无法将图像添加到按钮

时间:2013-03-20 12:17:21

标签: ios objective-c xcode uitableview uiimage

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

* 由于未捕获的异常'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];


    }
}

3 个答案:

答案 0 :(得分: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两次,一次就足够了。

答案 1 :(得分:0)

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

  

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

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

我的猜测是您正在使用预期为NSStringUIAElementArray的图片。

答案 2 :(得分: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];
                 }