0

我有一個viewController調用AudioViewController。在這方面,我有這個方法:從類方法訪問UINavigationController

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

我有一個NSObject類叫做AudioClass。在
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger) buttonIndex

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

現在,這是不承認的
[self.navigationController popViewControllerAnimated:YES];:在這方面,我有這些方法。
因爲,它在NSObject類中。我如何訪問navigationController並從AudioViewControlelr返回到之前的ViewController

如果任何人有任何解決方案,請與我分享。提前致謝。祝你有美好的一天。

+0

你不能只是在viewController裏面移動AlertView邏輯嗎? – 2014-11-04 16:04:47

+0

@GonjiDev感謝您的評論。我不能那樣做。因爲' - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player成功:(BOOL)flag'這個方法也使用相同的'[self alertMessage]''方法。這是'AudioClass'中。 – Tulon 2014-11-04 16:46:30

+0

以下@CleverError回答你應該通知viewController當 - (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)播放器成功:(BOOL)flag'被調用。你可以通過各種方式實現這一點,可以使用NSNotificationCenter。顯示警報是viewControllers的責任。 – 2014-11-04 16:53:40

回答

1

iOS開發基於Model View Contorller design pattern。你的AudioViewControlelr顯然是一個控制器,你的AudioClass實際上是一個模型。在MVC中,模型不應該直接修改視圖,這包括修改UINavigationControllers並顯示UIAlertViews

對於您的情況,您的AudioViewController應呼叫停止在AudioClass對象上並顯示UIAlertView


在一個側面說明,AudioRecorder會比AudioClass一個更好的名字。它更準確地描述了班級的作用,而不是僅僅告訴我們這是我們已經知道的班級。