无法为 UIImageView 设置图像



我有一个UIImageView,我无法获取图像并设置它显示。

viewDidLoad

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

从不同类调用的方法

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

AlbumViewController

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

在设置图像之前,您是否已检查控制器的视图是否已加载?UIViewControllers在显示视图之前不会加载视图,有时会在屏幕外卸载视图,因此在您调用时可能没有调用viewDidLoad

[albumContainer setImage:tempImage];

来自控制器外部。在设置图像之前,尝试记录albumContainer,看看它是否为零,如下所示:

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

要强制加载控制器的视图,可以说:

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

但您最好在视图控制器的initWithNibName:bundle:方法中创建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;
}

这样,即使视图尚未加载,它也将与控制器同时创建。

最新更新