首页 > 解决方案 > Swift 错误“UIButton.currentTitle 必须仅在主线程中使用”

问题描述

我刚刚从以下链接遵循了这个你管教程:

网址:https ://www.youtube.com/watch?v=aiXvvL1wNUc

我遇到一个错误,说“UIButton.currentTitle 只能从主线程使用”

不太清楚如何解决这个问题,因为我是制作应用程序的新手,有人可以帮助我吗?

非常感谢并提前感谢!

在此处输入图像描述

import UIKit
import MediaPlayer

class GenreButtonScreen: UIViewController {
    var musicPlayer = MPMusicPlayerController.applicationMusicPlayer

    @IBAction func genreButtonTapped(_ sender: UIButton) {
        MPMediaLibrary.requestAuthorization { (status) in
            if status == .authorized {
                self.playGenre(genre: sender.currentTitle!)
            }
        }
    }

    @IBAction func stopButtonTapped(_ sender: UIButton) {
        musicPlayer.stop()
    }

    @IBAction func nextButtonTapped(_ sender: UIButton) {
        musicPlayer.skipToNextItem()
    }

    func playGenre(genre:String) {
        musicPlayer.stop()

        let query = MPMediaQuery()
        let predicate = MPMediaPropertyPredicate(value: genre, forProperty: MPMediaItemPropertyGenre)

        query .addFilterPredicate(predicate)

        musicPlayer.setQueue(with: query)
        musicPlayer.shuffleMode = .songs 
        musicPlayer.play()
    }
}

标签: iosswiftuibutton

解决方案


MPMediaLibrary.requestAuthorization 是异步调用,布局组件只能在主线程中修改。你应该使用这种方式:

 MPMediaLibrary.requestAuthorization { (status) in
    if status == .authorized {
        DispatchQueue.main.async { 
           self.playGenre(genre: sender.currentTitle ?? String()) 
        }
    }
}

推荐阅读