0

У меня есть viewController по имени AudioViewController. В том, что я имею этот метод:Доступ к UINavigationController от classmethod

- (IBAction)stopAction:(id)sender 
{ 
    [self.audioClass stop]; 
} 

Я в NSObject класс под названием AudioClass. В том, что я имею эти методы:

-(void) stop 
{ 
    if (!recorder.recording) 
    { 
     [player stop]; 
     player.currentTime = 0; 

     [self.recordOrPauseButton setEnabled:YES]; 
     [self.stopButton setEnabled:NO]; 

     [self alertMessage]; 
    } 
    else 
    { 
     [recorder stop]; 

     AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
     [audioSession setActive:NO error:nil]; 
     [self alertMessage]; 
    } 
} 


-(void) alertMessage 
{ 
    UIAlertView *stopAlert = [[UIAlertView alloc] initWithTitle: @"Done!" 
                 message: @"Do you want to save it?" 
                 delegate: self 
               cancelButtonTitle:@"Cancle" 
               otherButtonTitles:@"Save", nil]; 
    [stopAlert show]; 
} 


- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger) buttonIndex 
{ 
    if (buttonIndex == 0) 
    { 
     // this is the cancel button 
    } 
    else 
    { 
     [self.sqLiteDB insertDataIntoTable:soundFilePath And:outputFileURL]; 
     [self.navigationController popViewControllerAnimated:YES]; 
    } 
} 

Теперь здесь в
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger) buttonIndex
он не распознает
[self.navigationController popViewControllerAnimated:YES];.
Потому что, это в классе NSObject. Как я могу получить доступ к этому navigationController и вернуться с AudioViewControlelr к предыдущему ViewController?

Если у кого-нибудь есть решение, поделитесь им со мной. Заранее большое спасибо. Хорошего дня.

+0

Вы не можете просто переместить логику AlertView внутри viewController? –

+0

@GonjiDev Спасибо, что комментировали. Я не могу этого сделать. Потому что '- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *) игрок успешно: (BOOL) flag' этот метод также использует тот же метод' [self alertMessage]; '. Что находится в 'AudioClass'. – Tulon

+0

После ответа @CleverError вы должны уведомить viewController, когда успешно активирован '- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *): (BOOL) flag'. Вы можете достичь этого разными способами, можно использовать NSNotificationCenter. Отображение оповещения - это ответственность viewControllers. –

ответ

1

Разработка iOS основана на Model View Contorller design pattern. Ваш AudioViewControlelr, очевидно, является контроллером, и ваш AudioClass на самом деле будет моделью. В MVC модели никогда не должны напрямую изменять виды, включая модификацию UINavigationControllers и отображение UIAlertViews.

В вашем случае ваш AudioViewController должен вызвать остановку на объекте AudioClass и показать UIAlertView.


На стороне записки, AudioRecorder будет лучше, чем имя AudioClass. Это более точно описывает то, что делает класс, а не просто говорит нам, что это класс, который мы уже знаем.

Смежные вопросы