2012-02-02 10 views
1

私はUIImageViewを持っていますので、画像を取得できません。UIImageViewの画像を設定できません

NSLog(@"URL:%@",url); 
//URL is defined by different class 
//URL is http://www.....882546328.jpg (I abbreviated it, but it is a valid url) 
NSData *imageData = [NSData dataWithContentsOfURL:url]; 
NSLog(@"URL LENGTH:%d",[imageData length]); 
// URL LENGTH:90158 

UIImage *tempImage = [UIImage imageWithData:imageData]; 
[albumContainer setImage:tempImage]; 

フルコード

PlayerViewController

-(void)viewDidLoad{ 
    [super viewDidLoad]; 
    playerView = [[AlbumViewController alloc]initWithNibName:@"AlbumViewController" bundle:nil]; 
} 
-(void)playMusic{ 

    playerView.url = [NSURL URLWithString:imagePathForm]; 
    playerView.songData = receivedData; 
    [loadingSong stopAnimating]; 
    [playerView play]; 

} 

AlbumViewCont異なるクラスから呼び出されるメソッド

albumContainer = [[UIImageView alloc]initWithFrame:CGRectMake(112, 7, 97, 97)]; 
[self.view addSubview:albumContainer]; 

viewDidLoadでローラー

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    albumContainer = [[UIImageView alloc]initWithFrame:CGRectMake(112, 7, 97, 97)]; 
    [self.view addSubview:albumContainer]; 
    url = [NSURL URLWithString:@""]; 
} 

-(void)play{ 
    NSLog(@"SONGDATA:%d",[songData length]); 
    player = [[AVAudioPlayer alloc] initWithData:songData error: nil]; 
    [player stop]; 

    player.delegate = self; 
    player.numberOfLoops = 0; 
    player.volume = 0.5; 
    [player prepareToPlay]; 
    [player play]; 
    NSLog(@"URL:%@",url); 
    NSData *imageData = [NSData dataWithContentsOfURL:url]; 
    NSLog(@"URL LENGTH:%d",[imageData length]); 

    UIImage *tempImage = [UIImage imageWithData:imageData]; 

    [albumContainer setImage:tempImage]; 

} 

私がチェックしalbumContainerがNULL

+0

"別のクラスから呼び出されたメソッド"とはどういう意味ですか? 'albumContainer'を使うと、このメソッドが同じクラス内で呼び出されたことを意味します、それは本当ですか? –

+0

私が投稿したコードは、albumViewControllerクラスからです。別のクラスのplayerViewControllerから私は上記のメソッドである[album setImage]を使用しています。 – Matt

+0

2番目のコードスニペット内のalbumContainerはどうですか?どのように定義されていますか?あなたのコードをコメントしたり、中毒情報を追加するように編集してみてください。ありがとうございました。 –

答えて

1

として記録はあなたが画像を設定する前に、コントローラのビューがロードされていることを確認しましたか?あなたは、コントローラの外部からあなたの

[albumContainer setImage:tempImage]; 

を呼び出すときのviewDidLoadがポイントで呼び出されていないかもしれないので、それが表示されるまでUIViewControllersは自分のビューをロードしていない、とオフスクリーンとき、彼らは時々それをアンロードします。 albumContainerは、あなたがこのように、画像を設定する前に、それがnilだかどうかを確認するためにログインしてみてください。

[controller view]; // this will load the view and call viewDidLoad 
[albumContainer setImage:tempImage]; 

しかし、あなたが作成したほうが良いことがあります。

NSLog(@"albumContainer: %@", albumContainer); //might log as null 
[albumContainer setImage:tempImage]; 

をロードするために、コントローラのビューを強制するには、あなたが言うことができますinitWithNibNameであなたのalbumContainer:バンドル:このようなのviewDidLoadであなたのビューコントローラのメソッドの代わりに、:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)bundleOrNil 
{ 
    if ((self = [super initWithNibName:nibNameOrNil bundle:bundleOrNil])) 
    { 
     albumContainer = [[UIImageView alloc]initWithFrame:CGRectMake(112, 7, 97, 97)]; 
[self.view addSubview:albumContainer]; 
    } 
    return self; 
} 

それはcontrolleと同時に作成されます。その方法たとえビューがまだロードされていなくても。

+0

私は自分のコードで質問を更新しました – Matt

関連する問題