2011-05-09 80 views
0

嗨 我不断收到这样的警告,当我尝试建立个项目如何防止警告

警告:不同的Objective-C型“的UIImage *”和“的UIButton *”条件表达式缺乏投

有什么我可以做的吗?

#import "avTouchController.h" 
#include "CALevelMeter.h" 

// amount to skip on rewind or fast forward 
#define SKIP_TIME 1.0   
// amount to play between skips 
#define SKIP_INTERVAL .2 

@implementation avTouchController 

@synthesize fileName; 
@synthesize playButton; 
@synthesize ffwButton; 
@synthesize rewButton; 
@synthesize volumeSlider; 
@synthesize progressBar; 
@synthesize currentTime; 
@synthesize duration; 
@synthesize lvlMeter_in; 

@synthesize updateTimer; 
@synthesize player; 

@synthesize inBackground; 


void RouteChangeListener( void *     inClientData, 
         AudioSessionPropertyID inID, 
         UInt32     inDataSize, 
         const void *   inData); 

-(void)updateCurrentTimeForPlayer:(AVAudioPlayer *)p 
{ 
currentTime.text = [NSString stringWithFormat:@"%d:%02d", (int)p.currentTime/60,  (int)p.currentTime % 60, nil]; 
progressBar.value = p.currentTime; 
} 

- (void)updateCurrentTime 
{ 
[self updateCurrentTimeForPlayer:self.player]; 
} 

- (void)updateViewForPlayerState:(AVAudioPlayer *)p 
{ 
[self updateCurrentTimeForPlayer:p]; 

if (updateTimer) 
    [updateTimer invalidate]; 

if (p.playing) 
{ 
    [playButton setImage:((p.playing == YES) ? pauseBtnBG : playBtnBG) forState:UIControlStateNormal]; 
    [lvlMeter_in setPlayer:p]; 
    updateTimer = [NSTimer scheduledTimerWithTimeInterval:.01 target:self selector:@selector(updateCurrentTime) userInfo:p repeats:YES]; 
} 
else 
{ 
    [playButton setImage:((p.playing == YES) ? pauseBtnBG : playBtnBG) forState:UIControlStateNormal]; 
    [lvlMeter_in setPlayer:nil]; 
    updateTimer = nil; 
} 

} 

- (void)updateViewForPlayerStateInBackground:(AVAudioPlayer *)p 
{ 
[self updateCurrentTimeForPlayer:p]; 

if (p.playing) 
{ 
    [playButton setImage:((p.playing == YES) ? rewButton : playBtnBG) forState:UIControlStateNormal];   (this is where i have problems) 
} 
else 
{ 
    [playButton setImage:((p.playing == YES) ? rewButton : playBtnBG) forState:UIControlStateNormal]; 
} 
} 

-(void)updateViewForPlayerInfo:(AVAudioPlayer*)p 
{ 
duration.text = [NSString stringWithFormat:@"%d:%02d", (int)p.duration/60, (int)p.duration % 60, nil]; 
progressBar.maximumValue = p.duration; 
volumeSlider.value = p.volume; 
} 

- (void)rewind 
{ 
AVAudioPlayer *p = rewTimer.userInfo; 
p.currentTime-= SKIP_TIME; 
[self updateCurrentTimeForPlayer:p]; 
} 

- (void)ffwd 
{ 
AVAudioPlayer *p = ffwTimer.userInfo; 
p.currentTime+= SKIP_TIME; 
[self updateCurrentTimeForPlayer:p]; 
} 

- (void)awakeFromNib 
{ 
// Make the array to store our AVAudioPlayer objects 
soundFiles = [[NSMutableArray alloc] initWithCapacity:3]; 

playBtnBG = [[UIImage imageNamed:@"play.png"] retain]; 
pauseBtnBG = [[UIImage imageNamed:@"pause.png"] retain]; 
rewButton = [[UIImage imageNamed:@"rewind.png"] retain]; 

[playButton setImage:playBtnBG forState:UIControlStateNormal]; 

[self registerForBackgroundNotifications]; 

updateTimer = nil; 
rewTimer = nil; 
ffwTimer = nil; 

duration.adjustsFontSizeToFitWidth = YES; 
currentTime.adjustsFontSizeToFitWidth = YES; 
progressBar.minimumValue = 0.0; 

// Load the array with the sample file 
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath: [[NSBundle mainBundle] pathForResource:@"My Song" ofType:@"mp3"]]; 

self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil]; 
if (self.player) 
{ 
    fileName.text = [NSString stringWithFormat: @"%@ (%d ch.)", [[player.url relativePath] lastPathComponent], player.numberOfChannels, nil]; 
    [self updateViewForPlayerInfo:player]; 
    [self updateViewForPlayerState:player]; 
    player.numberOfLoops = 0; 
    player.delegate = self; 
} 

OSStatus result = AudioSessionInitialize(NULL, NULL, NULL, NULL); 
if (result) 
    NSLog(@"Error initializing audio session! %d", result); 

[[AVAudioSession sharedInstance] setDelegate: self]; 
NSError *setCategoryError = nil; 
[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &setCategoryError]; 
if (setCategoryError) 
    NSLog(@"Error setting category! %d", setCategoryError); 

result = AudioSessionAddPropertyListener (kAudioSessionProperty_AudioRouteChange, RouteChangeListener, self); 
if (result) 
    NSLog(@"Could not add property listener! %d", result); 

[fileURL release]; 
} 

-(void)pausePlaybackForPlayer:(AVAudioPlayer*)p 
{ 
[p pause]; 
[self updateViewForPlayerState:p]; 
} 

-(void)startPlaybackForPlayer:(AVAudioPlayer*)p 
{ 
if ([p play]) 
{ 
    [self updateViewForPlayerState:p]; 
} 
else 
    NSLog(@"Could not play %@\n", p.url); 
} 

- (IBAction)playButtonPressed:(UIButton *)sender 
{ 
if (player.playing == YES) 
    [self pausePlaybackForPlayer: player]; 
else 
    [self startPlaybackForPlayer: player]; 
} 

- (IBAction)rewButtonPressed:(UIButton *)sender 
{ 
if (rewTimer) [rewTimer invalidate]; 
rewTimer = [NSTimer scheduledTimerWithTimeInterval:SKIP_INTERVAL target:self selector:@selector(rewind) userInfo:player repeats:YES]; 
} 

- (IBAction)rewButtonReleased:(UIButton *)sender 
{ 
if (rewTimer) [rewTimer invalidate]; 
rewTimer = nil; 
} 

- (IBAction)ffwButtonPressed:(UIButton *)sender 
{ 
if (ffwTimer) [ffwTimer invalidate]; 
ffwTimer = [NSTimer scheduledTimerWithTimeInterval:SKIP_INTERVAL target:self selector:@selector(ffwd) userInfo:player repeats:YES]; 
} 

- (IBAction)ffwButtonReleased:(UIButton *)sender 
{ 
if (ffwTimer) [ffwTimer invalidate]; 
ffwTimer = nil; 
} 

- (IBAction)volumeSliderMoved:(UISlider *)sender 
{ 
player.volume = [sender value]; 
} 

- (IBAction)progressSliderMoved:(UISlider *)sender 
{ 
player.currentTime = sender.value; 
[self updateCurrentTimeForPlayer:player]; 
} 

- (void)dealloc 
{ 
[super dealloc]; 

[fileName release]; 
[playButton release]; 
[ffwButton release]; 
[rewButton release]; 
[volumeSlider release]; 
[progressBar release]; 
[currentTime release]; 
[duration release]; 
[lvlMeter_in release]; 

[updateTimer release]; 
[player release]; 

[playBtnBG release]; 
[pauseBtnBG release]; 
} 

#pragma mark AudioSession handlers 

void RouteChangeListener( void *     inClientData, 
         AudioSessionPropertyID inID, 
         UInt32     inDataSize, 
         const void *   inData) 
{ 
avTouchController* This = (avTouchController*)inClientData; 

if (inID == kAudioSessionProperty_AudioRouteChange) { 

    CFDictionaryRef routeDict = (CFDictionaryRef)inData; 
    NSNumber* reasonValue = (NSNumber*)CFDictionaryGetValue(routeDict, CFSTR(kAudioSession_AudioRouteChangeKey_Reason)); 

    int reason = [reasonValue intValue]; 

    if (reason == kAudioSessionRouteChangeReason_OldDeviceUnavailable) { 

     [This pausePlaybackForPlayer:This.player]; 
    } 
} 
} 

#pragma mark AVAudioPlayer delegate methods 

- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)p successfully:(BOOL)flag 
{ 
if (flag == NO) 
    NSLog(@"Playback finished unsuccessfully"); 

[p setCurrentTime:0.]; 
[self updateViewForPlayerState:p]; 
} 

- (void)playerDecodeErrorDidOccur:(AVAudioPlayer *)p error:(NSError *)error 
{ 
NSLog(@"ERROR IN DECODE: %@\n", error); 
} 

// we will only get these notifications if playback was interrupted 
- (void)audioPlayerBeginInterruption:(AVAudioPlayer *)p 
{ 
NSLog(@"Interruption begin. Updating UI for new state"); 
// the object has already been paused, we just need to update UI 
if (inBackground) 
{ 
    [self updateViewForPlayerStateInBackground:p]; 
} 
else 
{ 
    [self updateViewForPlayerState:p]; 
} 
} 

- (void)audioPlayerEndInterruption:(AVAudioPlayer *)p 
{ 
NSLog(@"Interruption ended. Resuming playback"); 
[self startPlaybackForPlayer:p]; 
} 

#pragma mark background notifications 
- (void)registerForBackgroundNotifications 
{ 
[[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(setInBackgroundFlag) 
               name:UIApplicationWillResignActiveNotification 
              object:nil]; 

[[NSNotificationCenter defaultCenter] addObserver:self 
             selector:@selector(clearInBackgroundFlag) 
              name:UIApplicationWillEnterForegroundNotification 
              object:nil]; 
} 

- (void)setInBackgroundFlag 
{ 
inBackground = true; 
} 

- (void)clearInBackgroundFlag 
{ 
inBackground = false; 
} 

@end 

编辑:我已经尝试了RewBtnBG,但它说没有在此范围内声明。任何事情来解决这个问题?

+1

该警告还会给你一个行号。在那一行上,你正在混合一个图像和一个按钮。 – 2011-05-09 14:12:23

回答

1
[playButton setImage:((p.playing == YES) ? rewButton : playBtnBG) forState:UIControlStateNormal]; 

newButton是一个UIButton和playBtnBG是一个UIImage我猜。可能你真的想要(从你的命名约定猜测其他图像)。

[playButton setImage:((p.playing == YES) ? rewBtnBG : playBtnBG) forState:UIControlStateNormal]; 
+0

看编辑,好吗? – 2011-05-11 04:22:58

相关问题