在为我的 Mac 程序添加脚本功能时,我正在努力解决从索引数组中删除项目的常见编程问题,在该索引数组中,项目索引因删除项目而发生变化。
假设我的应用程序维护一个数据存储,其中存储了“Person”类型的对象。在 sdef 中,我定义了 Cocoa KeyallPersons
来访问这些元素。我的应用声明了一个NSArray *allPersons
.
到目前为止,它运作良好。例如,这个脚本运行良好:
repeat with p in every person
get name of p
end repeat
当我想支持删除项目时,问题就开始了,如下所示:
repeat with p in (get every person)
delete p
end repeat
(我意识到我可以只写“删除每个人”,这很好,但我想展示“重复”如何使事情变得更复杂)。
这不起作用,因为即使在删除其中一些项目之后,AppleScript 仍继续使用原始项目编号来引用这些项目,这自然会改变项目及其编号。
所以,考虑到我们有 3 个人,“Adam”、“Bonny”和“Clyde”,这将发生:
get every person
--> {person 1, person 2, person 3}
delete person 1
delete person 2
delete person 3
--> error number -1719 from person 3
删除第 1 项(亚当)后,其他项目重新编号为第 1 项和第 2 项。第二次迭代删除第 2 项(现在是克莱德),第三次迭代尝试删除第 3 项,该第 3 项不再存在那一点。
我该如何解决这个问题?
我可以强制脚本引擎不使用它们的索引号而是使用它们的唯一 ID 来处理这些项目,这样就不会发生这种情况吗?