首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS UIAppearance错误

iOS UIAppearance错误
EN

Stack Overflow用户
提问于 2012-06-21 11:28:40
回答 3查看 789关注 0票数 6

我正在构建一个文件管理应用程序,在调用UIImagePickerControllerMPMediaPickerController时偶尔会遇到以下错误

代码语言:javascript
复制
*** -[_UIImageViewPretiledImageCacheKey hash]: message sent to deallocated instance 0x140dc0

我最近使用iOS 5的UIAppearance应用程序接口给我的应用程序提供了一个自定义主题,这就是我开始收到这个错误的时候。通过猜测和检查,我找到了导致此错误的代码中有问题的行:

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-21 11:46:48

经过一些更彻底的测试,我得出的结论是,这个问题仅限于视网膜设备。这个问题出现在@2x的图片中。他们有一个奇数的分辨率(例如,59px x 60px)。我所做的就是重新创建图像,并将分辨率更改为60px x 60px,我再也没有遇到过这个问题。

我对这个解决方案感到有点惊讶,因为我看不到错误消息和代码行之间的相关性,但最终,是图像导致了这个问题。

票数 3
EN

Stack Overflow用户

发布于 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来解决这个问题。

作品:

代码语言:javascript
复制
UIImage *image = [UIImage imageNamed:name];
UIImage *resizableImage = [image resizableImageWithCapInsets:edgeInsets resizingMode:UIImageResizingModeStretch];

使用EXC_BAD_ACCESS或使用NSZombieEnabled[_UIImageViewPretiledImageCacheKey hash]: message sent to deallocated instance 0xb14deb0崩溃

代码语言:javascript
复制
UIImage *image = [UIImage imageNamed:name];
UIImage *resizableImage = [image resizableImageWithCapInsets:edgeInsets];
票数 2
EN

Stack Overflow用户

发布于 2013-02-21 18:39:45

对于下面的代码,我得到了相同的结果

代码语言:javascript
复制
UIImage* image = [UIImage stretchableImageNamed:@"imageName"];
self.backgroundView = [[UIImageView alloc] initWithImage:image];
self.selectedBackgroundView = [[UIImageView alloc] initWithImage:image];

其中selfUITableViewCellstretchableImageNamed:是简单的

代码语言:javascript
复制
+(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)];
}

这是有帮助的:

代码语言:javascript
复制
self.backgroundView = [[UIImageView alloc] initWithImage:[UIImage stretchableImageNamed:@"imageName"]];
self.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage stretchableImageNamed:@"imageName"]];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11131123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档