2

我试图在使用ARC时应用Unsynchronized的回答(Drawing waveform with AVAssetReader)。只需要进行一些修改,主要是发布声明。非常感谢您的好评!我正在使用针对iOS5设备的Xcode 4.2。使用AVAssetReader和ARC绘制波形

但是,我试图调用整个事情时,最后在一个语句中卡住了。这里显示

方法:

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

一直试图把我的头围绕这几个小时,但无济于事。对于这种类型的方法,我的方法声明是错误的吗?谢谢!

+0

的主要问题是,你在一个UIImage调用initWithMPMediaItem。它被声明为你的类中的一个方法(我认为,直到你向我们展示它被声明的头部后才能真正知道),因此它期望在self上被调用(我认为它不是UIImage)。你需要决定你想要这个方法如何行动 - 它应该在UIImage类别中吗? – sosborn 2012-03-01 01:25:41

回答

2

看起来initWithMPMediaItem应该声明为UIImage的初始值设定项。所以,你应该在你的头文件中声明它UIImage类别内:

@interface UIImage (MPMedia) 

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

@end 
+0

我输入了你的答案,它的工作!我的方法与头部中的所有其他方法混为一谈。还有一些新的学习。谢谢你和sosborn! – JimVision 2012-03-01 02:57:02