Warning: Attempt to present ControllerA and ControllerB whose view is not in the window hierarchy!

本文解析了一个UIAlertViewController在ViewDidLoad中直接调用导致的警告错误,提供了延时触发的方法避免问题发生。

今天在写UIAlertController的时候,在ViewDidLoad中声明并模态推出的时候出现了一个错误:

Warning: Attempt to present <UIAlertController: 0x7f8691f12f80>  on <ViewController: 0x7f8691c38d20> which is already presenting <UIAlertController: 0x7f8691e93930>


这个错误网上查了一下,原因是在presnet的时候viewDidLoad还没有执行完成,只有viewDidLoad执行完成之后,正常使用。

在控制器加载的时候,不能使用这个去调用,这样就必须向办法延时才行。

由于是Demo,习惯性的直接写在viewDidLoad中,我最后使用一个Button来出发这个动作,就没有以上错误了。


<think>嗯,用户遇到了一个关于prj.conf配置的问题,错误信息是“prj.conf:5: warning: attempt to assign the value 'y' to the undefined symbol WDT”。首先,我需要回忆一下之前在配置nRF52832的看门狗时提供的步骤。用户可能按照之前的指导在prj.conf中添加了CONFIG_WDT=y和CONFIG_WDT_NRF=y,但出现了这个警告。这说明用户可能在配置过程中遇到了符号未定义的问题。 首先,我需要确定这个错误的原因。通常,在Zephyr的Kconfig系统中,如果尝试设置一个不存在的配置选项,就会出现这样的警告。也就是说,用户可能在prj.conf中错误地输入了配置符号的名称。例如,正确的配置应该是CONFIG_WDT=y,而用户可能错误地写成了WDT=y,漏掉了CONFIG_前缀。或者,可能配置符号的名字在NCS版本中发生了变化,特别是在不同的SDK版本中,符号名称可能会有差异。 接下来,我需要检查用户提到的SDK版本,即NCS 2.6.2。在Zephyr的文档或Nordic的官方资料中,查看该版本下看门狗的配置符号是否正确。例如,可能正确的符号是CONFIG_WATCHDOG=y而不是CONFIG_WDT=y,或者需要其他依赖项被启用。有时候,某些配置选项依赖于其他选项,如果依赖项没有启用,即使设置了当前选项,也会导致未定义的警告。 另外,用户可能没有正确启用Nordic的看门狗驱动。在之前的回答中,我提到需要设置CONFIG_WDT_NRF=y,但可能在NCS 2.6.2中,这个符号已经被重命名或拆分成了更具体的选项,比如针对不同系列的芯片有不同的配置符号,例如CONFIG_WDT_NRFX=y。或者可能需要启用更高层次的驱动框架,如CONFIG_WATCHDOG=y,然后再启用具体厂商的驱动。 此外,用户可能没有正确配置设备树,导致看门狗设备未被正确初始化,从而相关的Kconfig符号未被正确生成。如果设备树中没有启用wdt0节点,那么相关的配置符号可能不会被定义,这时候即使在prj.conf中设置CONFIG_WDT=y,系统也无法找到对应的符号,从而报错。 还需要考虑用户的项目配置是否正确,比如是否在正确的目录下修改了prj.conf,或者是否有其他配置文件覆盖了这些设置。有时候,项目中的其他Kconfig文件可能会影响最终的配置,需要检查是否有冲突的设置。 总结可能的原因: 1. 配置符号名称错误,比如缺少CONFIG_前缀或符号名称变更。 2. 依赖的配置选项未启用。 3. 设备树配置未正确启用看门狗外设。 4. SDK版本差异导致符号名称或配置方式变化。 需要逐步排查这些可能性,建议用户首先检查prj.conf中的配置符号是否正确,确认是否遗漏了CONFIG_前缀,或者是否有拼写错误。然后查看官方文档或示例项目,确认在NCS 2.6.2中正确的配置符号是什么。同时,确保设备树中已经启用了wdt0节点,并且相关的驱动依赖项已经满足。 另外,用户可能需要运行menuconfig工具来交互式地查找正确的配置选项,或者检查生成的配置文件,确认哪些符号被实际启用。通过执行west build -t menuconfig,用户可以浏览可用的配置选项,找到与看门狗相关的正确符号,并确保它们被正确设置。 最后,可能需要建议用户参考Nordic官方论坛或Zephyr的文档,查看是否有其他用户遇到类似问题,或者在版本发布说明中查找配置变更的信息。确保所有步骤都符合NCS 2.6.2的要求,而不仅仅是旧版本的指导。</think>在 NCS 2.6.2 中遇到 `prj.conf:5: warning: attempt to assign the value 'y' to the undefined symbol WDT` 错误,通常是因为 **Kconfig 配置符号名称不匹配**。以下是详细原因和修复方法: --- ### 问题原因 1. **符号名称过时** 在较新的 Zephyr 版本中,看门狗(WDT)的配置符号可能已从 `CONFIG_WDT` 更新为 `CONFIG_WATCHDOG`。 2. **缺少依赖项** 未启用 Nordic 看门狗驱动的依赖项(如 `CONFIG_WDT_NRFX`)。 --- ### 修复步骤 #### 1. **更新 `prj.conf` 配置** 修改配置符号名称,并添加必要依赖项: ```conf CONFIG_WATCHDOG=y # 启用看门狗框架 CONFIG_WDT_NRFX=y # 启用Nordic看门狗驱动 CONFIG_WDT_NRFX_CHOOSE_TIMEOUT=y # 允许自定义超时时间(可选) ``` #### 2. **验证设备树配置** 确保在设备树文件(`.overlay`)中启用了看门狗外设: ```dts &wdt0 { status = "okay"; }; ``` #### 3. **检查代码兼容性** 使用 Zephyr 标准看门狗 API: ```c #include <zephyr/drivers/watchdog.h> const struct device *const wdt = DEVICE_DT_GET(DT_NODELABEL(wdt0)); wdt_setup(wdt, WDT_FLAG_RESET_SOC); // 超时后复位系统 ``` --- ### 完整配置示例 ```conf # prj.conf CONFIG_WATCHDOG=y CONFIG_WDT_NRFX=y CONFIG_WDT_NRFX_CHOOSE_TIMEOUT=y ``` --- ### 常见错误排查 - **错误提示** `undefined symbol WDT`:表示符号名称错误,需替换为 `CONFIG_WATCHDOG`。 - **驱动未初始化** 检查设备树中 `wdt0` 是否启用,并确保 `status = "okay"`。 - **调试建议** 运行 `west build -t menuconfig`,搜索 `WATCHDOG` 或 `WDT` 相关配置,确认符号名称。 --- ### 附:NCS 2.6.2 看门狗配置要点 | 配置项 | 作用 | |-------------------------------|------------------------| | `CONFIG_WATCHDOG` | 启用看门狗框架 | | `CONFIG_WDT_NRFX` | 启用Nordic看门狗驱动 | | `CONFIG_WDT_NRFX_TIMEOUT` | 设置默认超时时间(毫秒) | 通过以上修正,可解决符号未定义的问题,并正确配置看门狗功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值