我正在使用MPMediaItemPropertyArtwork设置imageView。当我更改轨迹时,代码工作得很好,但当我离开视图并返回时,会调用此代码,并且UIImageView.Image保持为零,即使我将其设置为非零值。
MPMediaItemArtwork *artwork = [nowPlayingItem valueForProperty:MPMediaItemPropertyArtwork];
if (artwork != nil) {
self.songImageView.image = [artwork imageWithSize:self.songImageView.frame.size];
}
我尝试了几次检查,以确定nowPlayingItem不是零,艺术品不是零,还有self.songImageView不是零。
有什么想法我还应该去哪里找吗?
你应该试试这个
MPMediaItemArtwork *artwork = [nowPlayingItem valueForProperty: MPMediaItemPropertyArtwork];
// now get UIImage object from the MPMediaItemArtwork object
if (artwork) {
artworkImage = [artwork imageWithSize: CGSizeMake (30, 30)];
//or
//artworkImage = [artwork imageWithSize: self.songImageView.bounds.size]];
self.songImageView.image = artworkImage
}
根据您提到的错误:
self.songImageView.frame.size错误:在上找不到属性"frame"UIImageView*"类型的对象错误:分析表达式时出现1个错误
看起来self.songImageView.frame为零。因此,您可能会给它一个真实的图像,但imageview没有框架来向您呈现该图像。所以当你调用imageWithSize时,它会给你一个没有大小的图像。
尝试:
MPMediaItemArtwork *artwork = [nowPlayingItem valueForProperty:MPMediaItemPropertyArtwork];
if (artwork != nil) {
self.songImageView.frame = CGRectMake(0, 0, 100, 100); // give the imageview a frame
self.songImageView.image = [artwork imageWithSize:self.songImageView.frame.size];
}
我以前遇到过类似的问题,我写了正确的代码,但在执行时,对象似乎不存在。
就我而言,我通过添加来解决问题
self.myObject = [[ClassOfMyObject alloc] init];
在我使用CCD_ 1之前。(实际上我在ViewDidLoad
方法中添加了这个。)
希望我的解决方案能帮助你。