ios - SwiftUI Preview 因 stackoverflow 崩溃
问题描述
在一个现有的应用程序中,我想尝试 SwiftUI 以获得一些小视图。我在 macOS Catalina 和 Xcode 11 中打开了我的项目,并添加了一个 SwiftUI 类。
令我惊讶的是,我收到以下错误:
无法在此文件中预览 - YourApp.app 可能已崩溃
在预览窗口的顶部。
当我查看崩溃日志时,我发现这是因为 stackoverflow 错误:
崩溃的线程:0 调度队列:com.apple.main-thread
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_PROTECTION_FAILURE at 0x00007ffee98cfff8
Exception Note: EXC_CORPSE_NOTIFY
Termination Signal: Segmentation fault: 11
Termination Reason: Namespace SIGNAL, Code 0xb
Terminating Process: exc handler [37403]
External Modification Warnings:
Thread creation by external task.
VM Regions Near 0x7ffee98cfff8:
MALLOC_SMALL 00007fa424000000-00007fa424800000 [ 8192K] rw-/rwx SM=PRV
--> STACK GUARD 00007ffee60d0000-00007ffee98d0000 [ 56.0M] ---/rwx SM=NUL stack guard for thread 0
Stack 00007ffee98d0000-00007ffeea0d0000 [ 8192K] rw-/rwx SM=ALI thread 0
Application Specific Information:
CoreSimulator 643.8.4 - Device: iPhone Xʀ (1C2CE9A2-334D-4A62-8AE9-C6CCC6D346E6) - Runtime: iOS 13.0 (17A5492t) - DeviceType: iPhone Xʀ
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 MessageView.2.preview-thunk.dylib 0x000000012f726918 -[UIViewController(PageViewLogging) ms_viewWillAppear:] + 34
1 MessageView.2.preview-thunk.dylib 0x000000012f72691b -[UIViewController(PageViewLogging) ms_viewWillAppear:] + 37
2 MessageView.2.preview-thunk.dylib 0x000000012f72691b -[UIViewController(PageViewLogging) ms_viewWillAppear:] + 37
3 MessageView.2.preview-thunk.dylib 0x000000012f72691b -[UIViewController(PageViewLogging) ms_viewWillAppear:] + 37
...
508 MessageView.2.preview-thunk.dylib 0x000000012f72691b -[UIViewController(PageViewLogging) ms_viewWillAppear:] + 37
509 MessageView.2.preview-thunk.dylib 0x000000012f72691b -[UIViewController(PageViewLogging) ms_viewWillAppear:] + 37
510 MessageView.2.preview-thunk.dylib 0x000000012f72691b -[UIViewController(PageViewLogging) ms_viewWillAppear:] + 37
511 MessageView.2.preview-thunk.dylib 0x000000012f72691b -[UIViewController(PageViewLogging) ms_viewWillAppear:] + 37
解决方案
这是因为您didFinishLaunchingWithOptions
在AppDelegate
. 在处理 SwiftUI 代码时清除该方法,它将按预期工作。
不完全确定为什么会这样,但可能是因为 SwiftUI 运行您的应用程序的一个实例来呈现它,并使用它AppDelegate
来执行此操作。
推荐阅读
- python - 同时使用值列表拆分字符串
- docker - Docker 容器中的 Ansible Playbook 执行跳过任务完成
- html - 如何创建一个以 HTML 格式播放 youtube 视频的按钮?
- python - 如何在 Django DetailView 视图中检索上一个/下一个条目
- java - 从 JAR 记录系统指标
- ios - UILabel 的默认行距
- c# - 让 Microsoft Graph 调用在 .net Web 应用程序中工作时遇到问题
- sql-server - SQL Server - 如何将多行数据放入返回的变量中
- linux - 什么可以使程序在 `strace` 中表现不同?
- html - 韦普和