嘿伙计们,我对 Stackoverflow 还是很陌生,所以如果我做错了什么,请多多包涵,我正在尽力而为。
我正在尝试在新的 Xcode11 beta 中使用新的 Apple watchOS6 和 swiftUI 制作一个简单的应用程序,它可以播放来自 assets.xcassets 的声音文件。
我认为在尝试查找资产中的文件时我做错了,这是错误代码:
致命错误:在展开可选值时意外发现 nil:文件 /Users/phillipeismark/Desktop/WatchOS6/WatchOS6Demo/WatchOS6Demo WatchKit Extension/Model/AudioPlayer.swift,第 21 行 2019-08-28 15:06:58.396058+0200 WatchOS6Demo WatchKit Extension[12691:794523] 致命错误:在展开可选值时意外发现 nil:文件 /Users/phillipeismark/Desktop/WatchOS6/WatchOS6Demo/WatchOS6Demo WatchKit Extension/Model/AudioPlayer.swift,第 21 行
我的代码是这样构建的: 我有一个 ContentView,它是一个列表,它只显示我的按钮,当它被按下时调用我的音频播放器。不包括 ContentView 的代码。
AudioPlayerButton 结构看起来像这样,它基本上只是在播放器上调用 play():
struct AudioPlayerButton: View {
@State var player = AudioPlayer()
var body: some View {
Button(action: player.play) {
Image("newPlayButton")
}
}
}
这是我收到错误的 AudioPlayer 类:
import Foundation
import AVFoundation
import Combine
import SwiftUI
class AudioPlayer {
var didChange = PassthroughSubject <Void, Never>()
var isPlaying: Bool = false
var AudioPlayer: AVAudioPlayer?
let url = URL.init(fileURLWithPath: Bundle.main.path(forResource: "Glad", ofType: ".wav")!)
//let url = URL.init(fileURLWithPath: Bundle.main.path(forResource: "Glad", ofType: ".wav", inDirectory:"/Users/phillipeismark/Desktop/WatchOS6/WatchOS6Demo/WatchOS6Demo WatchKit Extension/Assets.xcassets/" )!)
func play() {
do {
AudioPlayer = try AVAudioPlayer(contentsOf: url)
AudioPlayer?.play()
} catch {
print(error)
}
}
}
我注意到有多个asset.xcassets 文件夹,一个在watchOS6 WatchKit App 中,一个在WatchOS6 WatchKit Extension 中,为了确保我没有把它放在错误的位置,我只是将文件添加到了这两个文件夹中。
这是我尝试过的:
1:我注意到有多个asset.xcassets 文件夹,我尝试将文件添加到它们。
2:我尝试将 ForResource 和 ofType 参数都设置为 nil,以尝试“命中更多目标”,如文档所述:“如果您指定 nil,该方法将返回它找到的与其余条件匹配的第一个资源文件”。
3:我试图为 path(forResource:ofType:inDirectory:) 中的第三个参数赋值,正如您在我的 AudioPlayer 类中看到的带有注释行的那样。
4:我从一个我知道有效的旧项目中提取了一个旧声音。我还测试了该项目是否可以运行并且可以。
任何可以让我朝着正确方向前进的东西都非常感谢!谢谢。
如果有人想看,我将项目上传到GitHub 。
更新:IT WORKS 我在另一个项目中运行了普通的 iPhone 模拟器。除了创建一个新项目并启动模拟器之外,我什么也没做。然后我打开浏览器在 YouTube 上播放了一段视频。它仍然不起作用,所以我让视频在模拟器中播放并继续谷歌。然后,当视频结束并且 YouTube 必须播放添加声音时,声音神奇地开始起作用 - 甚至在视频开始之前就有一个添加但没有使它起作用,它是在视频结束时。我无语了。我的猜测是 iPhone 模拟器进行了配置,但我不知道。非常感谢任何关于这项工作或如何工作的理论