Lỗi Swift 5.1: [plugin] AddInstanceForFactory: Không có nhà máy nào đăng ký id <CFUUID


15

Ứng dụng gặp sự cố với thông báo lỗi sau

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

Điểm dừng khi gặp sự cố dường như có liên quan đến AVAudioPlayer

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

Câu trả lời:


1

Tôi đã tìm thấy giải pháp trong một luồng stackoverflow khác về AVAudioPlayer, đây là:

Nếu bạn khởi tạo AVAudioPlayerthích của bạn

var wrongMusicPlayer: AVAudioPlayer = AVAudioPlayer()HOẶC wrongMusicPlayer = AVAudioPlayer()trong bất kỳ phương pháp nào, sau đó xin vui lòng loại bỏ nó và chỉ cần khai báo như thế var wrongMusicPlayer: AVAudioPlayer!


1
Tôi không biết tại sao .. nhưng nó đã hoạt động .. Cảm ơn.
Rafaela Lourenço

9
KHÔNG phải là giải pháp, thật không may.
Phil

Vui lòng thêm một liên kết đến chủ đề được đề cập. Cám ơn.
HenryRootTwo

1
có ai tìm thấy một giải pháp cho điều này chưa? có cùng một vấn đề và câu trả lời được chấp nhận này không hiệu quả với tôi
alionthego

Nó cũng không hoạt động với tôi
maddy110989

0

Tôi tin rằng thông báo lỗi là một cảnh báo cho các trình giả lập do đó nó không quan trọng.

Tôi nghĩ vấn đề của bạn là một lỗi trong mã của bạn. Nên là một cái gì đó như thế này:

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

Trong đó forResource là tên của tệp và ofType là phần mở rộng. Bạn cũng có thể sử dụng Bundle.main.url sẽ như thế này:

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


0

Bạn có thể sử dụng do / Catch để tránh sự cố và kiểm tra ngoại lệ hoặc bỏ qua vấn đề cùng với try?. Đối với tôi, điều này chỉ hiển thị trong trình giả lập khi gọi:

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

Tôi nghĩ rằng nó an toàn để bỏ qua nó trong trường hợp của tôi.


0

Tôi tin rằng tất cả các bạn có thể đã thêm AVFoundation vào danh sách khung trong tab Thông tin chung của dự án.

Mã sai sót như sau:

import SwiftUI
import AVFoundation

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

var body: some View {

Và sau khi tôi chuyển var audioPlayer: AVAudioPlayertờ khai sang ngay sau dòngimport AVFoundation nó, nó dường như đang hoạt động.

Vì vậy, mã sau đây làm việc cho tôi trong một SwiftUIdự án.

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")
            }
        }
    }
}

}

Ban đầu tôi đã làm theo hướng dẫn này của CodeWithChris và cuộc thảo luận của nó cũng dẫn đến sự thay đổi ở trên. Ngoài ra kiểm tra theo hướng dẫn quá nếu bạn cần thêm ví dụ.

Hy vọng điều này sẽ hữu ích cho ai đó của bạn ngoài kia!

Chúc mừng!

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.