Swift Error quot;UIButton.currentTitle must be used from main thread onlyquot;(Swift 错误“UIButton.currentTitle 必须仅在主线程中使用)
问题描述
我刚刚从以下链接关注了这个你管教程:
网址:
导入 UIKit导入媒体播放器类 GenreButtonScreen: UIViewController {var musicPlayer = MPMusicPlayerController.applicationMusicPlayer@IBAction funcgenreButtonTapped(_ sender: UIButton) {MPMediaLibrary.requestAuthorization {(状态)在如果状态 == .authorized {self.playGenre(流派:sender.currentTitle!)}}}@IBAction func stopButtonTapped(_ sender: UIButton) {音乐播放器.stop()}@IBAction func nextButtonTapped(_ sender: UIButton) {音乐播放器.skipToNextItem()}功能播放流派(流派:字符串){音乐播放器.stop()让查询 = MPMediaQuery()让谓词 = MPMediaPropertyPredicate(值:流派,forProperty:MPMediaItemPropertyGenre)查询 .addFilterPredicate(谓词)musicPlayer.setQueue(with: query)musicPlayer.shuffleMode = .songs音乐播放器.play()}}
MPMediaLibrary.requestAuthorization 是异步调用,布局组件只能在主线程中修改.你应该这样使用:
MPMediaLibrary.requestAuthorization { (status) in如果状态 == .authorized {DispatchQueue.main.async {self.playGenre(流派: sender.currentTitle ?? String())}}}
I just followed this you tube tutorial from the following link:
URL: https://www.youtube.com/watch?v=aiXvvL1wNUc
I cam across an error saying "UIButton.currentTitle must be used from main thread only"
Not really sure how to fix this as I am new to making apps, can anyone help me?
Greatly appreciated and thanks in advance!
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()
}
}
The MPMediaLibrary.requestAuthorization is an async call, and layout components only can be modified in the Main Thread. You should use this way:
MPMediaLibrary.requestAuthorization { (status) in
if status == .authorized {
DispatchQueue.main.async {
self.playGenre(genre: sender.currentTitle ?? String())
}
}
}
这篇关于Swift 错误“UIButton.currentTitle 必须仅在主线程中使用"的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:Swift 错误“UIButton.currentTitle 必须仅在主线程中使用"
基础教程推荐
- 在 gmail 中为 ios 应用程序检索朋友的朋友 2022-01-01
- 如何在没有IB的情况下将2个按钮添加到右侧的UINavigationbar? 2022-01-01
- 如何在 UIImageView 中异步加载图像? 2022-01-01
- 如何在 iPhone 上显示来自 API 的 HTML 文本? 2022-01-01
- 当从同一个组件调用时,两个 IBAction 触发的顺序是什么? 2022-01-01
- 如何让对象对 Cocos2D 中的触摸做出反应? 2022-01-01
- Android:对话框关闭而不调用关闭 2022-01-01
- Kivy Buildozer 无法构建 apk,命令失败:./distribute.sh -m “kivy"d 2022-01-01
- UIWebView 委托方法 shouldStartLoadWithRequest:在 WKWebView 中等效? 2022-01-01
- android 应用程序已发布,但在 google play 中找不到 2022-01-01