使用Swift播放录制的音频

3

我正在通过Udacity学习“使用Swift进行iOS应用程序开发入门”课程。我已经完全按照指示将代码复制到了录制音频完成的点。这是他们告诉你要输入的内容:

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {         if (segue.identifier == "stopRecording"){             
let playVC:PlayViewController = segue.destinationViewController as PlayViewController             
let data = sender as RecordedAudio             
playVC.receivedAudio = data         }     } 

然而,它返回一个编译器错误,并要求我在as之后添加感叹号。当我运行程序时,它显示“在解包可选项时发现了nil”。我对编程比较新手,所以任何建议都会有帮助。

RecordedAudio是什么?你是如何触发segue的? - Lyndsey Scott
1个回答

3

enter image description here

我刚刚完成了这门课程。基本上,您要做的就是在不同屏幕之间传递数据。试着理解您要实现什么,这将有助于您更好地理解代码。

第一个屏幕的主要任务是录制音频,任务完成后,您将所有有关已完成任务的信息存储在名为RecordedAudio的对象中。其中包括var title: String!var filePathURL: NSURL!。存储录音信息后,我们准备将其传递给下一个屏幕的控制器,即PlayScreenController。首先,我们必须访问该控制器,然后传递数据。

override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?)
{
    // Checking segue if there are more than one
    if (segue.identifier == "stopRecording") {
        // Get the PlayScreenController access
        let playSoundVC = segue.destinationViewController
        as playScreenViewController

        // Cast sender into a RecordedAudio Object
        let data = sender as RecordedAudio

        // Passing the data to PlayScreen
        playSoundVC.audioData = data
    }
}

现在一切准备就绪,我们可以执行segue。在执行segue时,我们必须提供segue的标识和发送者的身份信息。
var recordedAduio = RecordedAduio()
recordedAduio.filePathURL = recorder.url
recordedAudio.title = recorder.url.lastPathComponent    

self.performSegueWithIdentifier("stopRecording", sender: recordedAudio)

请注意performSegueWithIdentifier中的发送方对象,这是我们可以在prepareSegue中将发送方强制转换为RecordedAudio对象的原因。 注意:记得在PlayScreenViewController中定义var audioData: RecordedAudio!,否则您无法将数据传递到第二个屏幕,因为没有变量可以保存您要传递的数据。

我在这一行收到了 SIGABRT 错误:let data = sender as! RecordedAudio我对 iOS 开发非常陌生,特别是 Swift。可能出了什么问题?所有的代码似乎都和你在答案中粘贴的代码类似。 - azee
一些来自控制台的更多信息: 无法将类型为 'UIButton' (0x104f06320) 的值转换为类型为 'Pitch_Perfect.RecordedAudio' (0x103568c40)。由于某种原因,prepareForSegue 方法的 sender 参数似乎是 UIButton 类型,因此在将 sender 强制转换为 RecordedAudio 时出现了上述错误。我尝试在 prepareForSeque 函数中将 sender 强制转换为 UIButton,并且没有失败,但是当强制转换为 RecordedAudio 时却失败了。可能是 Swift 2 中有些变化吧? - azee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接