Ich habe eine Split-View-Controller mit der Top-View-Controller auf einen Tabellenansicht-Controller, der eine Liste von Wiedergabelisten zur Auswahl angezeigt wird. Wenn die App zum ersten Mal geladen wird, fragt sie nach Musikzugriffsberechtigungen. Beantworten Sie die Frage mit Ja, aber die Tabellendarstellung zeigt keine Wiedergabelisten an. Am Ende muss ich die App beenden und sie erneut ausführen. Frage ich nach Musikbibliothek Erlaubnis den falschen Ort? Es ist in der ViewWillAppear des Topview-Controllers und speichert die Playlists, die ich verwende (da einige aussortiert sind), in einer Klasse von Playlists.Swift fragen Musik Erlaubnis für die erste Ansicht Controller
override func viewWillAppear(_ animated: Bool) {
self.clearsSelectionOnViewWillAppear = self.splitViewController!.isCollapsed
super.viewWillAppear(animated)
checkMediaAccessAndSetup()
}
func checkMediaAccessAndSetup() {
let authorizationStatus = MPMediaLibrary.authorizationStatus()
switch authorizationStatus {
case .notDetermined:
// Show the permission prompt.
MPMediaLibrary.requestAuthorization({[weak self] (newAuthorizationStatus: MPMediaLibraryAuthorizationStatus) in
// Try again after the prompt is dismissed.
self?.checkMediaAccessAndSetup()
})
case .denied, .restricted:
// Do not use MPMediaQuery.
return
default:
// Proceed as usual.
break
}
// Do stuff with MPMediaQuery
self.setupPlaylistStore()
tableView.reloadData()
}
Da der RequestAuthorization Block der MPMediaLibrary als [weak self] implementiert ist, kann self innerhalb des Blocks nil sein. Sind Sie sicher, dass die checkMediaAccessAndSetup-Methode aufgerufen wird, nachdem Sie eine Autorisierung für MPMediaLibrary angefordert haben? – Rendel
Es kann sein, dass der Aufruf von 'requestAuthorization' nicht im Hauptthread aufgerufen wird. Versuchen Sie 'self? .checkMediaAccessAndSetup()' innerhalb 'DispatchQueue.main.async {}' –
Versuchtes self.checkMediaAccessAndSetup() innerhalb von DispatchQueue.main.async {} in viewWillAppear (es wird nicht erlauben, selbst? .checkMediaAccessAndSetup()) . Gleiche Sache. – EdZ