Xcode 升级到 Xcode 9后,集成时若提示下述错误:
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
您遇到的问题是由于在非主线程(后台线程)调用了UI相关的API,这在Xcode 9及之后的版本中会触发警告或错误。根据您的描述和代码示例,问题出在请求远程通知权限的回调中直接调用了registerForRemoteNotifications
方法。
解决这个问题的关键是在执行UI操作或者调用UIKit/AppKit相关API时确保代码在主线程上运行。您已经正确地展示了如何修改代码以确保在主线程上注册远程通知:
dispatch_async(dispatch_get_main_queue(), ^{
[[application registerForRemoteNotifications];
});
这段代码使用了GCD(Grand Central Dispatch)来异步地将注册远程通知的任务安排到主线程上执行。这样可以避免在后台线程直接调用UI API导致的错误或警告。
总结来说,对于任何涉及到UI更新或者需要在主线程执行的操作,都应该使用类似的方法来确保线程安全,遵循iOS开发的最佳实践。这不仅限于Xcode 9,也是后续所有版本中应当持续遵守的原则。