6

UIImagePickerControllerファイル管理アプリを作成していますが、またはを呼び出しているときに次のエラーが発生することがありますMPMediaPickerController

*** -[_UIImageViewPretiledImageCacheKey hash]: message sent to deallocated instance 0x140dc0

最近、iOS5のUIAppearanceAPIを使用してアプリにカスタムテーマを指定しましたが、このエラーが発生し始めたのはそのためです。推測して確認することで、このエラーの原因となるコードの問題のある行を見つけました。

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

4

3 に答える 3

3

さらに徹底的なテストを行った結果、この問題は Retina デバイスに限定されているという結論に達しました。問題は @2x 画像にあることが判明しました。それらの解像度は奇数でした (例: 59px x 60px)。私がしたことは、画像を再作成し、解像度を 60px x 60px に変更しただけで、二度と問題を経験することはありませんでした.

エラーメッセージとコード行の間に相関関係が見られなかったので、解決策に少し驚きましたが、最終的に、この問題を引き起こしたのは画像でした.

于 2012-06-21T03:46:47.853 に答える
2

同様の問題がありましたが、クラッシュの原因はUIImageView.

私のサイズ変更可能な画像には、上=30px、左=20px、下=1px、右=10px のエッジ インセットがあります。画像は 43x45 なので、サイズ変更可能な領域は 13x14 です。私はiOS6を使用しているので、 forUIImageResizingModeStretchとして指定することで問題を回避できました。resizingMode-[UIImage resizableImageWithCapInsets:resizingMode:]

作品:

UIImage *image = [UIImage imageNamed:name];
UIImage *resizableImage = [image resizableImageWithCapInsets:edgeInsets resizingMode:UIImageResizingModeStretch];

EXC_BAD_ACCESSまたは[_UIImageViewPretiledImageCacheKey hash]: message sent to deallocated instance 0xb14deb0でクラッシュしNSZombieEnabledます:

UIImage *image = [UIImage imageNamed:name];
UIImage *resizableImage = [image resizableImageWithCapInsets:edgeInsets];
于 2013-01-11T04:51:55.873 に答える
0

次のコードでも同じです

UIImage* image = [UIImage stretchableImageNamed:@"imageName"];
self.backgroundView = [[UIImageView alloc] initWithImage:image];
self.selectedBackgroundView = [[UIImageView alloc] initWithImage:image];

どこにselfいてUITableViewCellstretchableImageNamed:単に

+(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"]];
于 2013-02-21T10:39:45.163 に答える