我有一个名为viewController
的AudioViewController
。在这种情况下,我有这种方法:
- (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
?如果有任何解决方案,请与我分享。非常感谢。祝你有美好的一天。
最佳答案
iOS开发基于Model View Contorller design pattern。您的AudioViewControlelr
显然是控制器,而您的AudioClass
实际上是模型。在MVC中,模型绝不能直接修改视图,包括修改UINavigationControllers
和显示UIAlertViews
。
在您的情况下,您的AudioViewController
应该在AudioClass
对象上调用stop并显示UIAlertView
。
附带说明,AudioRecorder
比AudioClass
是更好的名称。它更准确地描述了班级的工作,而不是仅仅告诉我们这是我们已经知道的班级。