You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

macOS 14.0带点KeyPath绑定在nib解码时崩溃问题咨询

macOS 14.0(Sonoma)下NSObjectController绑定嵌套KeyPath与Swift String的崩溃问题

结论

这是macOS Sonoma(14.0)的系统Bug,你的绑定用法没有问题。

触发条件

崩溃需要同时满足所有以下条件:

  • 模型属性为@objc dynamic修饰的Swift原生String类型(而非NSString)
  • 绑定使用嵌套KeyPath(如text.length)
  • 属性初始值是系统文本替换库中存在的字符串(例如"On my way!")
  • 崩溃发生在nib解归档阶段,且关联到后台拼写检查线程

崩溃原因分析

从错误日志和复现场景来看:

  1. 系统拼写检查线程会在nib加载时自动处理文本内容,当识别到系统替换库中的字符串时,会隐式修改Swift String的底层存储(Swift String是值类型,与NSString的引用类型机制不同)
  2. KVO对Swift值类型的观察依赖于自动生成的包装层,当底层存储被意外替换后,KVO的观察者注册状态出现不一致,导致后续移除观察者或发送更新通知时抛出错误
  3. 使用NSString时不会触发问题,因为它是引用类型,底层存储的变更会正确触发KVO通知;使用不在替换库中的字符串时,拼写检查线程不会干预修改,因此也不会崩溃

临时规避方案

可以选择以下任意一种方式解决:

  • 将模型属性类型改为NSString(如代码中注释的可行示例)
  • 延迟设置系统替换库中的字符串值,不在nib解归档阶段赋值(例如移到viewDidLoad方法中设置)
  • 暂时避免使用嵌套KeyPath,直接绑定顶层属性(如绑定text而非text.length)

内容的提问来源于stack exchange,提问作者Marek H

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 15:23:11