嗨我在向按钮添加图像时遇到问题。图像存储在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];
}
}
答案 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
的方法。
我的猜测是您正在使用预期为NSString
或UIAElementArray
的图片。
答案 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];
}