我有一个名为viewControllerAudioViewController。在这种情况下,我有这种方法:

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


我有一个名为NSObjectAudioClass类。在那方面,我有以下方法:

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

如果有任何解决方案,请与我分享。非常感谢。祝你有美好的一天。

最佳答案

iOS开发基于Model View Contorller design pattern。您的AudioViewControlelr显然是控制器,而您的AudioClass实际上是模型。在MVC中,模型绝不能直接修改视图,包括修改UINavigationControllers和显示UIAlertViews

在您的情况下,您的AudioViewController应该在AudioClass对象上调用stop并显示UIAlertView



附带说明,AudioRecorderAudioClass是更好的名称。它更准确地描述了班级的工作,而不是仅仅告诉我们这是我们已经知道的班级。

10-08 06:10