0

在此处输入代码我有这样的代码用于权限处理程序:

func authorizeMediaLibrary(forStatus status: MPMediaLibraryAuthorizationStatus) -> Void{
    switch status {
    case .authorized:
           self.initializeMedia()
    case .denied:
        guard let settingUrl = URL(string: UIApplication.openSettingsURLString) else {return}
        if UIApplication.shared.canOpenURL(settingUrl) {
            UIApplication.shared.open(settingUrl) { success in}
        }
    case .notDetermined:
        MPMediaLibrary.requestAuthorization { stat -> Void in
       
            if stat == .authorized {
                self.media.getMediaQueryCollection()
                self.allMediaItems = self.media.getMPMediaItemCollection()

            }
        }
    default:
       break
    }
    
}

我什至试过这个:

func getAuthrization(completionHandler:@escaping (Bool) -> Void)  {
            if MPMediaLibrary.authorizationStatus() == .authorized {
                completionHandler(true)
            } else {
                MPMediaLibrary.requestAuthorization() { completionHandler($0 == .authorized) }
            }
        } 

但是他们两个都没有帮助我,弹出窗口会显示,但是在接受后,它没有调用回调,也没有刷新我的视图来填充数据。我知道这是关于刷新我的视图,因为当我再次运行它,我得到了结果,并且权限状态更改为已授权。

问题:

4

1 回答 1

0

您遇到的问题与重新加载数据有关,因为授权已正确配置,我可以从您的代码中看到它,所以我建议在视图控制器的生命周期方法中刷新数据,并在 viewWillAppear 中调用授权请求(_animated: Bool) 函数,这里是我给你的推荐

 override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        authorizeMediaLibrary(forStatus: 
        MPMediaLibrary.authorizationStatus())
        //initialize your code for fetching the music data here.
       // reload your view , for example if you are showing it in tableview  
 use something like this, *self.tableview.reloadData()*
        if mediaItemFetched.count < 1 {
            timer = Timer.scheduledTimer(timeInterval: 1.0, target: self, selector:     #selector(self.refreshItem(), userInfo: nil, repeats: true)
            
        }
    }

在这里,我所做的是添加计时器以在第二个时间间隔内检查数据,因此在该 scheduleTimer 中,我具有选择器功能来刷新数据存储或数据项,如果数据不存在,我将在其中重新初始化数据,然后使计时器,也刷新了我的看法。我已经用简单的随机数据实现对其进行了测试,它使用你的函数对我有用,我请求授权。

于 2022-01-21T08:21:06.090 回答