我正在构建一个文件管理应用程序,在调用UIImagePickerController或MPMediaPickerController时偶尔会遇到以下错误
*** -[_UIImageViewPretiledImageCacheKey hash]: message sent to deallocated instance 0x140dc0我最近使用iOS 5的UIAppearance应用程序接口给我的应用程序提供了一个自定义主题,这就是我开始收到这个错误的时候。通过猜测和检查,我找到了导致此错误的代码中有问题的行:
UIImage *backButtonImage = [[UIImage imageNamed:@"backButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(12, 16, 12, 8)];
[[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
UIImage *barButtonImage = [[UIImage imageNamed:@"barButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(14, 12, 14, 12)];
[[UIBarButtonItem appearance] setBackgroundImage:barButtonImage forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];我不知道这段代码是如何触发上述错误的。您能否向我解释此错误的来源并提供解决方案来修复它。
预先感谢你的帮助,Guvvy
发布于 2012-06-21 11:46:48
经过一些更彻底的测试,我得出的结论是,这个问题仅限于视网膜设备。这个问题出现在@2x的图片中。他们有一个奇数的分辨率(例如,59px x 60px)。我所做的就是重新创建图像,并将分辨率更改为60px x 60px,我再也没有遇到过这个问题。
我对这个解决方案感到有点惊讶,因为我看不到错误消息和代码行之间的相关性,但最终,是图像导致了这个问题。
发布于 2013-01-11 12:51:56
我有一个similar problem,但是我的崩溃是由UIImageView中的一个可调整大小的图像引起的。
我的可调整大小的图像有top=30px,left=20px,bottom=1px,right=10px的边缘嵌入。图像的大小为43x45,因此其可调整区域为13x14。我使用的是iOS6,所以我可以通过将UIImageResizingModeStretch指定为-[UIImage resizableImageWithCapInsets:resizingMode:]的resizingMode来解决这个问题。
作品:
UIImage *image = [UIImage imageNamed:name];
UIImage *resizableImage = [image resizableImageWithCapInsets:edgeInsets resizingMode:UIImageResizingModeStretch];使用EXC_BAD_ACCESS或使用NSZombieEnabled的[_UIImageViewPretiledImageCacheKey hash]: message sent to deallocated instance 0xb14deb0崩溃
UIImage *image = [UIImage imageNamed:name];
UIImage *resizableImage = [image resizableImageWithCapInsets:edgeInsets];发布于 2013-02-21 18:39:45
对于下面的代码,我得到了相同的结果
UIImage* image = [UIImage stretchableImageNamed:@"imageName"];
self.backgroundView = [[UIImageView alloc] initWithImage:image];
self.selectedBackgroundView = [[UIImageView alloc] initWithImage:image];其中self是UITableViewCell,stretchableImageNamed:是简单的
+(UIImage*)stretchableImageNamed:(NSString*)name
{
UIImage *img = [UIImage imageNamed:name];
CGSize sz = img.size;
int left = (sz.width - 1.) / 2.;
int top = (sz.height - 1.) / 2.;
return [img resizableImageWithCapInsets:UIEdgeInsetsMake(top, left, top, left)];
}这是有帮助的:
self.backgroundView = [[UIImageView alloc] initWithImage:[UIImage stretchableImageNamed:@"imageName"]];
self.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage stretchableImageNamed:@"imageName"]];https://stackoverflow.com/questions/11131123
复制相似问题