我写了一个Mac OS X仪表板来展示自己和其他人的StackOverflow风格。
我的问题是,每当我将该窗口小部件更新为新版本时,将删除所有先前的实例,并在仪表板上创建一个新实例。因此,如果您之前遵循4人的风格,则必须重新创建小部件并再次输入其用户ID。 :(
有没有办法在更新小部件时保留所有正在运行的实例?
检查首选项文件,我看到在部署新版本的窗口小部件后创建了一个新实例。这是设计的吗?所有小部件都是这样工作的吗?如果是这样,可以以某种方式手动规避吗?
您可以在http://widget.huxhorn.de找到有问题的小部件,包括项目文件
我已经更改了remove()中的代码,将首选项设置为正确的值,而不是如下所示的null - 但这也无济于事。 我的错是什么?救命!我被卡住了!
我的小部件的另一个问题已修复: 我不小心打来电话
widget.preferenceForKey(null, dashcode.createInstancePreferenceKey(userIdPrefKey));
代替
widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey));
但现在已经修复(尚未发布)。
我知道这个工具接管了安装过程:http://junecloud.com/software/mac/smart-widget-installer.html
(来源:junecloud.com)
我认为你设置Preference ForKey和首选ForKey的调用看起来很奇怪。 null
来自哪里。他们不应该看起来像
widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey))
widget.setPreferenceForKey(value, dashcode.createInstancePreferenceKey(userIdPrefKey));
使用null
的语法
widget.setPreferenceForKey(null, dashcode.createInstancePreferenceKey(userIdPrefKey))
在remove()
中删除偏好?这可以解释你的情况我想。在更新时,remove()
被调用了surley,因此在重新启动小部件时,首选项就消失了。
我想在更新过程中只有一种方法可以保持您的偏好。创建一个preferencekey而不依赖于dashboard.createInstancePreferenceKey,而是认为自己是一个唯一的键值。
在此preferenceKey中,您可以使用不断增长的(例如逗号分隔)列表保存所有输入的用户ID(通过任何实例)。当一个小部件实例被打开时,widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey))
尚未设置你可以让用户通过给他一个选择或这样的东西来选择其中一个
我只是想,更新过程可能足以将首选项迁移到新版本。即使您不删除首选项,我认为widget.identifier(createInstancePreferenceKey)将更改,因此您无法访问“旧”设置。