首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >向用户发送设置权限的正确方式是什么

向用户发送设置权限的正确方式是什么
EN

Stack Overflow用户
提问于 2020-10-01 21:35:44
回答 1查看 110关注 0票数 1

如果用户已经解除了IOS请求应用程序权限的第一个默认警报,那么将用户发送到设置以允许权限的正确方法是什么?

我使用以下代码来向用户发送设置和允许通知权限,这是在用户关闭第一个直接请求权限的默认对话框的情况下完成的,该对话框是由IOS完成的。该应用程序使用核心数据作为本地数据库,这是与SwiftUI建立的UI。

这是我用来向用户发送设置的代码,以便允许权限:

代码语言:javascript
运行
复制
UIApplication.shared.open(URL(string: UIApplication.openSettingsURLString)!)

但我在下面这行得到了紫色警告,这是在Core Data中创建新对象所必需的(在其他方面):

代码语言:javascript
运行
复制
  guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }

紫色警告:

代码语言:javascript
运行
复制
UIApplication.delegate must be used from main thread only

我还收到了以下紫色警告Publishing changes from background threads is not allowed; make sure to publish values from the main thread (via operators like receive(on:)) on model updates.,这些警告是关于正在发布并希望在运行时修改的已发布属性的。

以此类推..处理Core Data数据库的问题。似乎很明显,问题是将用户发送到设备设置部分的第一行代码导致应用程序不能像它应该的那样在主线程上运行,因此出现错误。

对我来说,在任何核心数据处理函数上添加DispatchQueue.main.async {}似乎都不合适,我也不确定它是否能解决所有问题。

如果用户已经解除了IOS请求应用程序权限的第一个默认警报,那么将用户发送到设置以允许权限的正确方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2020-10-01 23:35:50

紫色警告来自主线程检查器,它是Xcode中的一个有用工具,可以帮助您发现试图访问错误队列中的内容。尽管您可以在方案设置中禁用它,但我强烈建议您不要这样做,因为它可以帮助您发现代码中的并发问题。

应该只能从主队列访问AppDelegate (以及任何与UI相关的内容),并且应该只从创建它的队列访问NSManagedObjectContext的任何实例,否则可能会遇到崩溃或数据损坏等问题。

如果您需要将用户从非主队列发送到设置,则必须分派到主队列。

如果您需要在多个队列上执行核心数据操作,请从阅读NSManagedObjectContext文档页面上的“并发”部分开始。

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

https://stackoverflow.com/questions/64156538

复制
相关文章

相似问题

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