Xcode 看看这个,告诉我我错过了什么

Xcode 看看这个,告诉我我错过了什么,xcode,Xcode,我有一个密码,按下按钮就会发出声音。它在模拟器上工作,但是当我把它发送到我的设备进行测试时,我得到了这个错误;EXC\u错误访问(代码=1,地址=0x48)。我有最新版本的xcode,我相信它是swift 5???。任何帮助都将不胜感激。还请注意,我没有付费的开发者帐户 import UIKit import AVFoundation class ViewController: UIViewController { var musicEffect: AVAudioPlayer = AV

我有一个密码,按下按钮就会发出声音。它在模拟器上工作,但是当我把它发送到我的设备进行测试时,我得到了这个错误;EXC\u错误访问(代码=1,地址=0x48)。我有最新版本的xcode,我相信它是swift 5???。任何帮助都将不胜感激。还请注意,我没有付费的开发者帐户

import UIKit
import AVFoundation

class ViewController: UIViewController {
    var musicEffect: AVAudioPlayer = AVAudioPlayer()

    @IBOutlet weak var muffin: UIImageView!
    @IBOutlet weak var muffin_text: UIImageView!
    @IBOutlet weak var muffin_button: UIButton!


    override func viewDidLoad() {

        super.viewDidLoad()
        // Do any additional setup after loading the view.
        let musicFile = Bundle.main.path(forResource: "muffin", ofType: ".mp3")
        do {
            try musicEffect = try AVAudioPlayer(contentsOf: URL (fileURLWithPath: musicFile!))
        }    
        catch {
            print(error)
        }                  
    }        

    @IBAction func click(_ sender: Any) {

       musicEffect.play() 
    }
}

我是Xcode和Swift的新手,但我会删除(.)mp3。我相信圆点是暗含的,不用写

它在模拟器上工作,但是当我把它发送到我的设备进行测试时,我得到了这个错误

iOS和macOS之间的一大区别是,iOS设备上的文件系统区分大小写,而macOS上的许多(但不是所有)文件系统不区分大小写。每当我看到类似“它在模拟器上工作,但在设备上不工作”这样的问题时,我认为这可能与读取文件有关

因此,检查应用程序中文件
muffin.mp3
的大小写。它实际上是
Muffin.mp3
还是
Muffin.mp3
还是
Muffin.mp3
还是类似的?如果它不完全是
muffin.mp3
,而是有一些大写字母,那就可以解释为什么找不到该文件。在您尝试播放之前,您的代码不会检查
musicefect
中的值是否有效,这就解释了您可能会出现错误的原因


更新:在看了@Larme的评论后,我认为如果您使用的是iOS 13.1,那么问题更可能是不正确的初始值设定项。例如,见
AVAudioPlayer
没有普通的
init()
初始值设定项,因此需要使用一些数据对其进行初始化,例如:

`var musicEffect: AVAudioPlayer = AVAudioPlayer(data: someAudioData)`

显示堆栈跟踪。
var musicefect:AVAudioPlayer=AVAudioPlayer()
更改该行。参考。在SO(包括Swift代码)Hi中有两个链接问题不起作用。我在调试控制台中得到这个。musicFile String?”/private/var/containers/Bundle/Application/E5CE4ADD-5115-49C1-AD19-73249EE23790/Muffin Time.app/Muffin.mp3“我应该在里面放些什么?我放的任何东西都会得到一个未解决的标识符错误?@TomFellas你可以将
musicefect
作为一个隐式展开的可选选项,比如
var musicefect:AVAudioPlayer!”,然后确保在使用它之前为它赋值。