我目前正在使用Swift""介绍iOS应用程序开发。当然通过Udacity。我已将代码完全复制到我们完成录制音频的位置。这是他们告诉你输入的内容:
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。我对编程比较陌生,所以任何建议都会有所帮助。
答案 0 :(得分:2)
我刚刚完成了这门课程。所以基本上你要做的就是在不同的屏幕之间传递数据。试着了解你要做什么,这有助于你更好地理解代码。
第一个屏幕的主要任务是录制音频,在任务完成后,将有关已完成任务的所有信息存储到名为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
对象。
注意:请记住在var audioData: RecordedAudio!
中定义PlayScreenViewController
,否则您无法将数据传递到第二个屏幕,因为没有变量可以保存您所拥有的数据试图通过。
如果您仍然不理解,请在下面留言。
快乐的编码,不要因为投票而气馁。
还有一件事,输入代码比应对和粘贴更好。