我的环境:
- Mac OS X v 10.10.4
- 版本 6.4 (6E35b)
我的项目:
- 使用 Swift 1.2 和 Storyboard 的 Mac 应用
一些背景知识:我得到了一个 NSTableView,其中的多个列全部连接到 NSArrayController 中,而 NSArrayController 又连接到核心数据(例如实体“Car”)。一切正常 - 我可以加载和编辑列值,并将更改保存到 sqlite。所有这些都是通过 Interface Builder 进行绑定(bind)来完成的。我现在想向该表添加一个新的“颜色”列,表示与另一个实体(例如实体“颜色”)的关系。每行都会有一个用于这个新列的 NSPopUpButton ;弹出按钮的值应该从链接到“Color”实体的第二个 NSArrayController 填充。因此,“颜色”是汽车和颜色之间的多对一关系(许多汽车可以引用给定的颜色),我希望弹出按钮中的值对应于颜色中的“名称”属性.
我做了什么:
在 Storyboard中(在包含汽车表的 Controller 场景下),我添加了第二个 NSArrayController,“颜色数组 Controller ”:
1) 在“属性检查器”下 -> 模式 = 实体名称,实体名称 = 颜色,选中“准备内容”复选框
2) 在“绑定(bind)检查器”下 -> 参数 -> 托管对象上下文 -> 选中“绑定(bind)到” -> 选择“汽车 Controller ” -> 模型 key 路径 = 上下文
在 Cars 表(NSTableCellView 下)中,添加了一个 NSPopUpButton。
此时,一切都构建并正常运行,除了表中的所有列都显示弹出按钮中的“Item 1”默认值(当我展开弹出按钮时,我还可以看到其他默认值)上)。
现在,我尝试了以下方法,但徒劳地尝试使用正确的值加载弹出窗口:
策略一:
使用 Interface Builder,选择 NSPopUpButton。在绑定(bind)检查器(值选择)下,选中“绑定(bind)到”并指定上面的颜色数组 Controller ; Controller 键->排列对象;模型键路径 -> 名称
策略2:
- 为汽车 Controller 中的“颜色数组 Controller ”创建了一个 IBOutlet“colorsArray”;
- 使用 Interface Builder 选择 NSPopUpButton。在绑定(bind)检查器(值选择)下,选中“绑定(bind)到”并指定汽车 Controller ;模型关键路径 -> colorArray.arrangedObjects
对于上述两种策略,每当我尝试运行(或只是构建)项目时,Xcode 都会卡在“编译 1 of 1 Storyboard 文件”处。事件监视器显示“ibtoold”进程稳定消耗所有可用内存(一旦我终止它,Xcode 就会报告我的构建失败)。
如果有人能够阐明我做错了什么,或者提出替代方案来实现所需的结果,我将不胜感激。
最佳答案
我刚刚遇到了同样的问题:一旦我将 NSPopupButton
的 content
绑定(bind)到 ArrayController
的 >arrangedObjects
Xcode 将永远编译 Storyboard。当我删除绑定(bind)时,它将照常编译:(
由于我的 NSPopupButton
位于表列内,因此我删除了数组 Controller ,现在将其 content
直接绑定(bind)到表列对象的属性值。
关于swift - 将 NSPopUpButton 绑定(bind)到核心数据会挂起 Xcode 构建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32195038/