我有一個分割視圖控制器與頂視圖控制器設置爲表視圖控制器,該控制器將顯示播放列表供選擇。該應用程序首次加載時要求獲得音樂訪問權限。回答是允許,但表格視圖不顯示播放列表。我最終不得不殺掉應用程序並再次運行它。我是否要求音樂庫許可權是錯誤的地方?這是在頂視圖控制器的viewWillAppear和存儲播放列表我使用的播放列表(因爲一些被篩選出)在一類播放列表中。swift問初始視圖控制器的音樂權限
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()
}
由於MPMediaLibrary requestAuthorization塊實現爲[weak self],因此self可能在塊內部爲零。你確定checkMediaAccessAndSetup方法在MPMediaLibrary請求授權後被調用嗎? – Rendel
這可能是由於在主線程上未調用requestAuthorization回調引起的。嘗試在DispatchQueue.main.async中調用'self?.checkMediaAccessAndSetup()'' –
嘗試self.checkMediaAccessAndSetup()裏面的DispatchQueue.main.async {}裏面viewWillAppear(它不會允許self?.checkMediaAccessAndSetup()) 。一樣。 – EdZ