Multiple Dashboard widget instances don't survive widget update. Any way to prevent this?

不羁的心 提交于 2019-12-10 12:11:57

问题


I've written a Mac OS X Dashboard to show the StackOverflow flair of yourself and other people.

My problem is that whenever I update that widget to a new version, all previous instances are removed and a single new instance is created on the Dashboard. So if you previously followed the flair of 4 people you'll have to recreate the widgets and enter their user-IDs again. :(

Is there any way to keep all running instances while updating a widget?

Checking the preferences file, I see that a new instance is created after a new version of the widget is deployed. Is this by design? Does all widgets work like this, by any chance?? If so, can this be manually circumvented somehow?

You can find the widget in question, including the project files, at http://widget.huxhorn.de

I've changed the code in remove() to set the preferences to the correct values instead of null as suggested below - but this doesn't help, either.
What's my mistake?? Help! I'm stuck!


The other problem of my widget has been fixed:
I accidentally called

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

instead of

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

but this is now fixed (not yet released).


回答1:


I know about this tool that takes over the install process: http://junecloud.com/software/mac/smart-widget-installer.html


(source: junecloud.com)




回答2:


I think your calls to setPreferenceForKey and preferenceForKey look strange. Where does that null come from. Shouldn't they look like

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

Does the syntax with null

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

in remove() delete the preference? That would explain you situation I guess. On Update the remove() gets surley called and thus on restart of the widget the preferences are gone.


I guess there is only one way to keep your preferences during an update. Create one preferencekey without relying on dashboard.createInstancePreferenceKey but instead think yourself of a unique key value.

In this preferenceKey you could then save all ever entered userids (by any instance) with a growing (say comma seperated) list. When a widget instance is opened an the widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey)) isn't already set you could let the user choose one of those by giving him a select or such a thing

I was just thinking maybe the update process is nice enough to migrate the preferences to the new verison. Even when you don't remove the preferences I think the widget.identifier (createInstancePreferenceKey) will have changed an thus you can't access the "old" settings.



来源:https://stackoverflow.com/questions/1023397/multiple-dashboard-widget-instances-dont-survive-widget-update-any-way-to-prev

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!