gpt4 book ai didi

objective-c - 无法为 UIImageView 设置图像

转载 作者:行者123 更新时间:2023-11-29 13:41:07 24 4
gpt4 key购买 nike

我有一个 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];

完整代码

播放器 View Controller

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

}

相册 View Controller

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

最佳答案

在设置图像之前,您是否检查过 Controller 的 View 是否已加载? UIViewControllers 在显示之前不会加载它们的 View ,有时它们会在屏幕外卸载它,因此在您调用您的 viewDidLoad 时可能尚未调用

[albumContainer setImage:tempImage];

从 Controller 外部。在设置图像之前尝试记录 albumContainer 以查看它是否为 nil,如下所示:

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

要强制加载 Controller 的 View ,您可以说:

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

但您最好在 View Controller 的 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;
}

这样,即使 View 尚未加载,它也会与 Controller 同时创建。

关于objective-c - 无法为 UIImageView 设置图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9120257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com