【问题标题】:UIImageView.image is nil after being set with non-nil valueUIImageView.image 设置为非零值后为零
【发布时间】:2016-04-12 17:01:35
【问题描述】:

我正在使用 MPMediaItemPropertyArtwork 设置 imageView。当我更改轨道时代码运行良好,但是当我离开视图并返回时,调用此代码并且 UIImageView.Image 保持为零,即使我将其设置为非零值。

MPMediaItemArtwork *artwork = [nowPlayingItem valueForProperty:MPMediaItemPropertyArtwork];
if (artwork != nil) {
    self.songImageView.image = [artwork imageWithSize:self.songImageView.frame.size];
}

我已经尝试了几次检查以确定 nowPlayingItem 不是 nil,artifact 不是 nil 并且 self.songImageView 不是 nil。

还有什么我应该在哪里寻找的想法?

【问题讨论】:

  • 我应该注意这种行为。当我在 self.songImageView.image 上设置断点 = 我试过这个:po self.songImageView.frame.size 错误:在“UIImageView *”类型的对象上找不到属性“框架”错误:1 解析表达式错误
  • 根据您的评论,Imageview 似乎没有框架。尝试先设置 imageview 的框架,然后按照你的方式添加图像
  • 不相关,但还要注意在 Objective-C 中 nil 的计算结果为 false。你可以写“if (artwork) { ... }”代替“if (artwork != nil) { ... }”。

标签: ios objective-c uiimageview mpmediaitem


【解决方案1】:

你应该试试这个

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
}

【讨论】:

  • 我试过了:MPMediaItemArtwork artwork = [nowPlayingItem valueForProperty:MPMediaItemPropertyArtwork]; if (artwork) { UIImage artworkImage = [artwork imageWithSize: self.songImageView.bounds.size]; self.songImageView.image = 艺术品图像; } 没用
  • 使用 CGSizeMake (30, 30) 怎么样?
【解决方案2】:

根据你提到的错误:

self.songImageView.frame.size 错误:找不到属性“框架” '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];
}

【讨论】:

    【解决方案3】:

    我之前也遇到过类似的问题,我写的代码是对的,但是执行的时候,对象好像不存在。

    就我而言,我通过添加解决了这个问题

    self.myObject = [[ClassOfMyObject alloc] init];
    

    在我使用self.myObject 之前。 (其实我是在ViewDidLoad方法里加的。)

    希望我的解决方案对您有所帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多