我正在构建一个仅适用于 iPhone 的小型应用程序 (iOS SDK 6.0),我得到了 EXC_BAD_ACCESS XCode 中的异常。
该应用程序有 UITableView
与自定义 UITableViewCell
.我已经实现了UITableViewCell
在一个子类中(我在这里称之为 MyCustomCell
)并向构造函数添加了另一个参数:
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier cellImage:(UIImage *)image;
UIImage
已添加到 contentView
的TableCell
在方法中,使用以下代码:imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 100, 50)];
imageView.image = image;
[self.contentView addSubview:imageView];
此函数在函数
cellForRowAtIndexPath
内调用当然:static NSString *CellIdentifier = @"MyCustomCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
cell = [[[MyCustomCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier cellImage:self.cellImage] autorelease];
}
return cell;
cellImage
ViewController
的属性(property)(也是 UITableViewDelegate
)被声明为(它也是合成的):@property (nonatomic, retain) UIImage* cellImage;
图像在
viewWillAppear
中初始化ViewController 的方法具有以下行:cellImage = [UIImage imageNamed:@"my_image_resource.png"];
此代码工作正常,但出现 EXC_BAD_ACCESS,当我使用 iOS 6.0 自定义图像时,仅功能 :
cellImage = [[UIImage imageNamed:@"my_image_resource.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 10, 0, 10) resizingMode:UIImageResizingModeStretch];
调试帮助我找到了触发错误的行 - 它位于
initWithStyle
MyCustomCell 实现方法:imageView.image = image;
我看过很多
EXC_BAD_ACCESS
错误,我还阅读了为什么会出现此错误的教程,但到目前为止,我没有释放任何东西。此时可能会释放某些对象,但我无法准确找到哪个对象以及如何解决该问题。我还尝试在 ViewController 类中创建两个属性,一个用于保存原始图像,另一个用于保存带有插图的图像。然而,它并没有解决问题。
为什么这是一个错误?为什么它不适用于带有插图的图像?我该如何解决这个问题?
谢谢你。
最佳答案
执行语句imageView.image = image;
时出现错误.因此,对象 image
执行此语句时不存在。它必须在以前发布过,或者通过 [release image]
明确发布。 (因为您不使用 ARC),或者如果 image
则隐含是自动发布的(例如,如果您使用 [UIImage imageNamed:...]
创建它)。
正如 Aaron Wojnowski 建议的那样,我认为最好的方法是转换您的代码 ARC。否则,检查是否 image
可以意外释放。
关于iphone - iOS:UIImage EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14674966/