多个Dashboard小部件实例无法在小部件更新中生效。有什么办法可以防止这个?

时间:2009-06-21 07:44:43

标签: javascript macos dashcode mac-dashboard-widget

我写了一个Mac OS X仪表板来展示自己和其他人的StackOverflow风格。

我的问题是,无论何时将该窗口小部件更新为新版本,都会删除所有先前的实例,并在仪表板上创建一个新实例。因此,如果您之前遵循4人的风格,则必须重新创建小部件并再次输入其用户ID。 :(

有没有办法在更新小部件时保留所有正在运行的实例?

检查首选项文件,我发现在部署新版本的窗口小部件后会创建一个新实例。这是设计的吗? 所有小部件是否像这样工作,任何机会?如果是这样,可以以某种方式手动规避吗?

您可以在http://widget.huxhorn.de

找到有问题的小部件,包括项目文件

我已将remove()中的代码更改为首选项更改为正确的值,而不是 null ,如下所示 - 但这没有帮助, 。
我的错是什么?救命!我被卡住了!


我的小部件的另一个问题已修复:
我不小心打电话给

widget.preferenceForKey(null, dashcode.createInstancePreferenceKey(userIdPrefKey));

而不是

widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey));

但现在已经修复(尚未发布)。

2 个答案:

答案 0 :(得分:1)

我知道这个工具接管了安装过程:http://junecloud.com/software/mac/smart-widget-installer.html

alt text
(来源:junecloud.com

答案 1 :(得分:0)

我认为你对setPreferenceForKey和preferenceForKey的调用看起来很奇怪。 null来自哪里。他们不应该看起来像

widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey))
widget.setPreferenceForKey(value, dashcode.createInstancePreferenceKey(userIdPrefKey));

语法是否为null

widget.setPreferenceForKey(null, dashcode.createInstancePreferenceKey(userIdPrefKey))

remove()中删除偏好?这可以解释你的情况我想。在更新时,remove()被调用,因此在重新启动小部件时,首选项就消失了。


我想在更新过程中只有一种方法可以保留您的偏好。创建一个preferencekey而不依赖于dashboard.createInstancePreferenceKey,而是认为自己是一个唯一的键值。

在这个preferenceKey中,您可以使用不断增长的(例如逗号分隔)列表保存所有输入的用户ID(通过任何实例)。当一个小部件实例被打开时,widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey))尚未设置,你可以让用户通过给他一个选择或这样的东西来选择其中一个

我只是想,更新过程可能足以将首选项迁移到新版本。即使您不删除首选项,我认为widget.identifier(createInstancePreferenceKey)也会更改,因此您无法访问“旧”设置。