我写了一个Mac OS X仪表板来展示自己和其他人的StackOverflow风格。
我的问题是,无论何时将该窗口小部件更新为新版本,都会删除所有先前的实例,并在仪表板上创建一个新实例。因此,如果您之前遵循4人的风格,则必须重新创建小部件并再次输入其用户ID。 :(
有没有办法在更新小部件时保留所有正在运行的实例?
检查首选项文件,我发现在部署新版本的窗口小部件后会创建一个新实例。这是设计的吗? 所有小部件是否像这样工作,任何机会?如果是这样,可以以某种方式手动规避吗?
找到有问题的小部件,包括项目文件我已将remove()中的代码更改为将首选项更改为正确的值,而不是 null ,如下所示 - 但这没有帮助, 。
我的错是什么?救命!我被卡住了!
我的小部件的另一个问题已修复:
我不小心打电话给
widget.preferenceForKey(null, dashcode.createInstancePreferenceKey(userIdPrefKey));
而不是
widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey));
但现在已经修复(尚未发布)。
答案 0 :(得分:1)
我知道这个工具接管了安装过程:http://junecloud.com/software/mac/smart-widget-installer.html
(来源: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)也会更改,因此您无法访问“旧”设置。