【问题标题】:Drawing Waveform with AVAssetReader and with ARC使用 AVAssetReader 和 ARC 绘制波形
【发布时间】:2012-03-19 12:33:30
【问题描述】:

我正在尝试在使用 ARC 时应用 Unsynchronized 的答案 (Drawing waveform with AVAssetReader)。只需要进行少量修改,主要是发布声明。非常感谢您的精彩回答!我正在使用针对 iOS5 设备的 Xcode 4.2。

但我在尝试调用整个事情时卡在最后的一个语句上。

这里显示的方法:

-(void) importMediaItem {

    MPMediaItem* item = [self mediaItem];

    waveFormImage = [[UIImage alloc ] initWithMPMediaItem:item completionBlock:^(UIImage* delayedImagePreparation){

        [self displayWaveFormImage];
    }];

    if (waveFormImage) {
       [self displayWaveFormImage];
    }
}

在调用 initWithMPMediaItem 时出现以下错误:

Automatic Reference Counting Issue.  Receiver type 'UIImage' for instance message 
does not declare a method with selector 'initWithMPMediaItem:completionBlock:'

由于我确实在类头中声明了 initWithMPMediaItem 方法,我真的不明白为什么会出现此错误。

- (id) initWithMPMediaItem:(MPMediaItem*)item
       completionBlock:(void (^)(UIImage* delayedImagePreparation))completionBlock;

我已经尝试了几个小时来解决这个问题,但无济于事。对于这种类型的方法,我的方法声明是否错误?谢谢!

【问题讨论】:

  • 主要问题是您在 UIImage 上调用 initWithMPMediaItem。它被声明为你的类中的一个方法(我认为,直到你向我们展示它声明的标题才能真正知道)所以它期望在 self 上被调用(我假设它不是 UIImage)。你需要决定你希望这个方法如何工作——它应该在 UIImage 类别中吗?

标签: iphone objective-c automatic-ref-counting core-audio waveform


【解决方案1】:

看起来应该将initWithMPMediaItem 声明为UIImage 的初始化程序。所以你应该在头文件的UIImage 类别中声明它:

@interface UIImage (MPMedia)

- (id) initWithMPMediaItem:(MPMediaItem*)item
   completionBlock:(void (^)(UIImage* delayedImagePreparation))completionBlock;

@end

【讨论】:

  • 我输入了你的答案,它成功了!我将该方法与标题中的所有其他方法混为一谈。还有一些新东西要学。谢谢 sch 和 sosborn!
猜你喜欢
  • 2011-06-29
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-09
  • 1970-01-01
相关资源
最近更新 更多