ошибка: ‘fxVolumeSlider’ не объявлен (впервые используется в этой функции) — Нужно объявить IBOUTLET?

#iphone #objective-c #xcode #cocoa-touch

#iPhone #objective-c #xcode #cocoa-touch

Вопрос:

Хорошо, теперь я пытаюсь изменить громкость на ползунке

вот код

 @implementation MainerViewController
@synthesize fxVolumeSlider;

- (IBAction)pushPlay:(id)sender; {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"test" ofType:@"wav"];
    if (theAudio) [theAudio release];
    theAudio = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    theAudio.delegate = self;
    [theAudio play];    
    volumeTimer = [NSTimer scheduledTimerWithTimeInterval:0.05 target:self selector:@selector(updateVolume) userInfo:nil repeats:YES];

}

-(void)updateVolume {
    [theAudio setVolume:fxVolumeSlider.value];
}

- (void)viewDidLoad {
    [super viewDidLoad];

    // Setup custom slider images
    UIImage *minImage = [UIImage imageNamed:@"grey_track.png"];
    UIImage *maxImage = [UIImage imageNamed:@"white_track.png"];
    UIImage *tumbImage= [UIImage imageNamed:@"metal_screw.png"];

    minImage=[minImage stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0];
    maxImage=[maxImage stretchableImageWithLeftCapWidth:10.0 topCapHeight:0.0];

    // Setup the FX slider
    [fxVolumeSlider setMinimumTrackImage:minImage forState:UIControlStateNormal];
    [fxVolumeSlider setMaximumTrackImage:maxImage forState:UIControlStateNormal];
    [fxVolumeSlider setThumbImage:tumbImage forState:UIControlStateNormal];

    fxVolumeSlider.minimumValue = 0.0;
    fxVolumeSlider.maximumValue = 1.0;
    fxVolumeSlider.continuous = YES;
    //fxVolumeSlider.value = [sharedSoundManager fxVolume];

    // Attach an action to sliding
    [fxVolumeSlider addTarget:self action:@selector(fxSliderAction:) forControlEvents:UIControlEventValueChanged];

    // Cleanup
    minImage = nil;
    maxImage = nil;
    tumbImage = nil;
}
- (void) fxSliderAction:(id)sender {
    [theAudio setFxVolume:fxVolumeSlider.value];
}
  

Однако теперь я получаю эту ошибку

предупреждение: ‘AVAudioPlayer’ может не отвечать на ‘-setFxVolume:’

Итак, каждый раз, когда я нажимаю кнопку воспроизведения, я пытаюсь отрегулировать громкость, но меня выгоняют из приложения

Ответ №1:

Вы объявили и ivar, и свойство как _fxVolumeSlider , но то, что вы используете в методе, является fxVolumedSlider . Оба не совпадают. Вы должны использовать _fxVolumeSlider или то, что вы, вероятно, имели в виду, это объявить свойство как

 @property(retain, nonatomic) IBOutlet UISlider *fxVolumeSlider;
  

и синтезировать его с помощью

 @synthesize fxVolumeSlider = _fxVolumeSlider;
  

Но даже тогда вы не сможете использовать его как fxVolumeSlider . Вы можете использовать его как self.fxVolumeSlider или _fxVolumeSlider . Если вы хотите использовать его как обычный fxVolumeSlider , вам следует заменить все _fxVolumeSlider s на fxVolumeSlider .

Комментарии:

1. Я думаю, что метод, который вы ищете, является setVolume: и не setFxVolume: .

Ответ №2:

Проверьте подчеркивание в объявлении. В файле .h у вас есть:

 IBOutlet UISlider *_fxVolumeSlider;
  

У вас должен быть:

 IBOutlet UISlider *fxVolumeSlider;
  

Кроме того, в файле .m отредактируйте строку

 @synthesize _fxVolumeSlider;
  

чтобы быть

 @synthesize fxVolumeSlider;
  

Что касается вашей исправленной проблемы:

 - (void) fxSliderAction:(id)sender {
    [theAudio setFxVolume:fxVolumeSlider.value];
}
  

вместо этого следует читать как

 - (void) fxSliderAction:(id)sender {
    [theAudio setVolume:fxVolumeSlider.value];
}
  

Следите за опечатками (и ищите их перед публикацией!)

Комментарии:

1. Хорошо, спасибо, теперь это работает, но пользовательский интерфейс не меняется, я связал его в interface builder

2. Сбросьте ссылки теперь, когда вы изменили объявленное имя (это то, что распознает IB).

3. Возможно, еще одна опечатка. Где вы объявили и синтезировали fxVolume ?

4. В верхней части .m @implementation MainerViewController @synthesize fxVolumeSlider;

5. ОПЕЧАТКА : fxVolume не совпадает с fxVolumeSlider