首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >即使在使用完处理程序之后,MPMediaLibrary requestAuthorization也会在用户接受权限后执行代码。

即使在使用完处理程序之后,MPMediaLibrary requestAuthorization也会在用户接受权限后执行代码。
EN

Stack Overflow用户
提问于 2022-01-18 10:16:42
回答 1查看 55关注 0票数 0

输入代码hereI有类似于权限处理程序的代码:

代码语言:javascript
复制
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
    }
    
}

我甚至试过这个:

代码语言:javascript
复制
func getAuthrization(completionHandler:@escaping (Bool) -> Void)  {
            if MPMediaLibrary.authorizationStatus() == .authorized {
                completionHandler(true)
            } else {
                MPMediaLibrary.requestAuthorization() { completionHandler($0 == .authorized) }
            }
        } 

但是它们都帮不了我,弹出窗口会显示,但在接受后,它不会调用回调,也不会刷新我的视图来填充数据,我知道这是从我所理解的方面来刷新我的视图,因为当我再次运行它时,我会得到结果,并且权限状态被更改为已授权。

问题:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-01-21 08:21:06

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

代码语言:javascript
复制
 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)
            
        }
    }

这里我所做的是添加计时器,以检查数据的第二个时间间隔,因此在该scheduledTimer中,我有选择器函数来刷新数据存储区或数据项,如果数据不存在,就重新初始化数据,然后使计时器失效,并刷新我的视图。我用简单的随机数据实现对它进行了测试,我使用您的函数来请求授权。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70753865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档