我试图从NewList中删除一个项目但是没有方法。直接访问列表项是安全的吗?为什么没有removeItem:方法?
| m |
m := NewListModel new.
m items: (1 to: 50) asOrderedCollection.
m headerTitle: 'Fubu'.
m setSelectedIndex: 2.
m listItems remove: 3.
m openWithSpec.
以上情况有效,但如果我有域对象,它将失败并显示消息:
ShouldNotImplement: #remove:ifAbsent: should not have been implemented in Array
答案 0 :(得分:2)
您不应该remove:
来自m listItems
的项目,如上一句话中所示。再次发送m items:
消息。对于此消息的参数,让模型对象提供不再包含要删除的元素的项集合。
当然,如果这些元素保存在Array
中,您将无法remove:
任何内容,并且需要提供新的Array
作为原始副本没有删除元素。但是,如果您的模型将元素保留在OrderedCollection
中,则只需从元素中删除元素即可。
换句话说,你需要一个实际的模型对象来负责知道哪些元素属于集合,而NewModelList
实例反映了这种情况,而不是NewModelList
持有通过删除或添加元素来维护这样的集合,因为这是实际模型对象的工作。两个对象都指向同一个集合,但对它们负有不同的责任。