2012-02-02 5 views
1

나는 UIImageView입니다. 이미지를 가져 와서 표시하도록 설정할 수 없습니다. viewDidLoadUIImageView에 이미지를 설정할 수 없습니다.

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

방법에

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 다른 클래스

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]; 

전체 코드에서 호출되는 롤러

- (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

두 번째 코드 스 니펫의 albumContainer는 어떻게됩니까? 어떻게 정의됩니까? 중독성있는 정보를 추가하기 위해 코드에 주석을 달거나 편집 해보십시오. 고맙습니다. –

답변

1

로 기록? 이 표시 될 때까지 UIViewControllers는 뷰를로드하지 않고, 오프 스크린 때의 viewDidLoad이 시점에서 호출되지 않았을 수 있도록 컨트롤러 외부에서 당신의

[albumContainer setImage:tempImage]; 

를 호출 할 때 그들은 때때로 언로드. albumContainer는이 같은 이미지를 설정하기 전에 무기 호입니다 있는지 확인하기 위해 로그인하십시오 :

[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과 동시에 생성됩니다 r보기가 아직로드되지 않은 경우에도.

+0

가지고있는 코드로 내 질문을 업데이트했습니다. – Matt

관련 문제