0

経由でロードされた画像を割り当てようとしています

[UIImage imageWithData: [NSData dataWithContentsOfURL:imageUrl]];

私のナビゲーションバーに。ここに私が持っているものがあります:

   //Loading Image from Url and adding it to navigationbar
    NSString *urlString = [NSString stringWithFormat:@"http://someurl.com/%@.gif",imageId];
    NSURL *imageUrl = [NSURL URLWithString:urlString];
    UIImage *myImage = [UIImage imageWithData: [NSData dataWithContentsOfURL:imageUrl]];
    UIButton* button = (UIButton *) myImage;
    UIBarButtonItem *buttonItem = [[UIBarButtonItem alloc] initWithCustomView:button];
    self.navigationItem.rightBarButtonItem = buttonItem;

これは、ローカル画像を取得して、次のように画像ビューを割り当てる限り機能します。

UIButton* button = (UIButton *) [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"myLocalImage.png"]];

私が得るエラーは次のとおりです: *** キャッチされていない例外 'NSInvalidArgumentException' によるアプリの終了、理由: '-[UIImage _setAppearanceIsInvalid:]: 認識されないセレクターがインスタンス 0x6876df0 に送信されました'

誰でも助けることができますか?(それとも、とにかくこれはあまりにも厄介なハックですか?) どうもありがとうございました!

Ps: ナビゲーション バーに画像を追加するための元の質問: iPhone アプリケーションのナビゲーション バーに画像を表示するにはどうすればよいですか?

編集: コードにエラーがあります:次のようになるはずです:

UIButton* button = (UIButton *) [[UIImageview alloc] initWithImage:myImage];

とにかく、もうエラーは出なくなりましたが、画像が表示されません...

4

2 に答える 2

1

これは非同期で動作するはずです

UIButton *button = [UIButton alloc] init];
UIBarButtonItem *barButtonItem = [[UIBarButtonItem alloc] initWithCustomView:button]; 
self.navigationItem.rightBarButtonItem = barButtonItem;

__block UIImage *image;
// create a dispatch queue to download your image asynchronously
dispatch_queue_t downloadQueue = dispatch_queue_create("image downloader", NULL);
// show network activity indicator
[UIApplication sharedApplication].networkActivityIndicatorVisible = YES;
 dispatch_async(downloadQueue, ^{
        image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageUrl]];
        // dispatch to the main queue
        dispatch_sync(dispatch_get_main_queue(), ^{
                // set your button's image
                [button setImage:image forState:UIControlStateNormal];
            });
        }
});
    dispatch_release(downloadQueue);
// hide network activity indicator
    [UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
于 2012-09-17T18:36:56.570 に答える
0

とった。このコードは別のスレッドにあり、ビューが既に読み込まれた後は機能しないと思います。私がそれをvieDidLoadに平易に置くと、それは動作します...

ここに投稿するとすぐに悟りが得られます... ^^

于 2012-09-17T18:20:06.743 に答える