ข้อผิดพลาดของ Swift 5.1: [ปลั๊กอิน] AddInstanceForFactory: ไม่มีการลงทะเบียนจากโรงงานสำหรับ id <CFUUID


15

แอปขัดข้องด้วยข้อความแสดงข้อผิดพลาดต่อไปนี้

2019-10-12 20:01:34.332334-0700 Awesome App[26368:3535170] [plugin] AddInstanceForFactory: No factory registered for id <CFUUID 0x600002903280> F8BB1C28-BAE8-11D6-9C31-00039315CD46

จุดพักที่ผิดพลาดน่าจะเกี่ยวข้องกับ AVAudioPlayer

let path = Bundle.main.path(forResource: "menu_background.mp3", ofType:nil)!
audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path)) ---> breakpoint

คำตอบ:


1

ฉันได้ค้นพบวิธีแก้ไขปัญหาในเธรด stackoverflow อื่นเกี่ยวกับ AVAudioPlayer นี่คือ:

หากคุณเริ่มต้นAVAudioPlayerชอบ

var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()หรือwrongMusicPlayer = AVAudioPlayer()ด้วยวิธีใด ๆ โปรดลบออกและเพียงแค่ประกาศอย่างเช่นvar wrongMusicPlayer: AVAudioPlayer!


1
ฉันไม่รู้ว่าทำไม .. แต่ใช้งานได้ดีขอบคุณ
Rafaela Lourenço

9
ไม่ใช่วิธีแก้ปัญหาโชคไม่ดี
ฟิล

กรุณาเพิ่มลิงค์ไปยังกระทู้ที่อ้างถึง ขอบคุณ.
HenryRootTwo

1
มีใครพบวิธีการแก้ปัญหานี้หรือยัง มีปัญหาเดียวกันและคำตอบที่ได้รับการยอมรับไม่ได้ผลสำหรับฉัน
alionthego

ใช้งานไม่ได้สำหรับฉันเช่นกัน
maddy110989

0

ฉันเชื่อว่าข้อความแสดงข้อผิดพลาดเป็นการเตือนสำหรับผู้เลียนแบบดังนั้นมันจึงไม่สำคัญ

ฉันคิดว่าปัญหาของคุณเป็นข้อบกพร่องในรหัสของคุณ ควรเป็นดังนี้:

let path = Bundle.main.path(forResource: "menu_background", ofType:"mp3") audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path!)) ---> breakpoint

โดยที่forResourceเป็นชื่อของไฟล์และofTypeคือส่วนขยาย คุณยังสามารถใช้Bundle.main.urlซึ่งจะมีลักษณะเช่นนี้:

let path = Bundle.main.url(forResource: "menu_background", withExtension:"mp3") audioPlayer = try AwesomeAudioPlayer(contentsOf: URL(fileURLWithPath: path!)) ---> breakpoint


0

คุณสามารถใช้ทำ / try?จับเพื่อหลีกเลี่ยงความผิดพลาดและตรวจสอบข้อยกเว้นหรือละเว้นปัญหาทั้งหมดเข้าด้วยกันด้วย สำหรับฉันนี่เป็นเพียงการแสดงในเครื่องจำลองเมื่อมีการโทร:

try? AVAudioSession.sharedInstance().setCategory(.playback)

ฉันคิดว่ามันปลอดภัยที่จะเพิกเฉยในกรณีของฉัน


0

ฉันเชื่อว่าคุณทุกคนอาจเพิ่ม AVFoundation ไปยังรายการกรอบงานในแท็บข้อมูลทั่วไปของโครงการ

รหัสผิดพลาดเป็นดังนี้:

import SwiftUI
import AVFoundation

struct PlayerDetailView: View {
@State private var downloadedFilePath: URL = nil
var audioPlayer: AVAudioPlayer

var body: some View {

และหลังจากที่ฉันย้ายvar audioPlayer: AVAudioPlayerประกาศไปหลังimport AVFoundationแถวมันก็ดูเหมือนจะทำงาน

ดังนั้นรหัสต่อไปนี้ทำงานให้ฉันในSwiftUIโครงการ

import SwiftUI
import AVFoundation
var audioPlayer: AVAudioPlayer!

struct PlayerDetailView: View {
@State private var downloadedFilePath: URL = nil

var body: some View {
    VStack {
        Button("Play the Downloaded Track") {
            if let downloadedPath = self.downloadedFilePath?.path, FileManager().fileExists(atPath: downloadedPath) {
                do {
                    audioPlayer = try AVAudioPlayer(contentsOf: self.downloadedFilePath!)
                    guard let player = audioPlayer else { return }

                    player.prepareToPlay()
                    player.play()
                } catch let error {
                    print(error.localizedDescription)
                }
            } else {
                print("The file doesn not exist at path || may not have been downloaded yet")
            }
        }
    }
}

}

ฉันเริ่มติดตามการสอนของCodeWithChris นี้และการสนทนาก็นำไปสู่การเปลี่ยนแปลงข้างต้น เช็คเอาต์กวดวิชาต่อไปนี้ด้วยหากคุณต้องการตัวอย่างเพิ่มเติม

หวังว่านี่จะเป็นประโยชน์กับคนที่คุณรัก!

ไชโย!

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.