Несколько экземпляров виджета Dashboard не сохраняются при обновлении виджета. Есть ли способ предотвратить это? - PullRequest
0 голосов
/ 21 июня 2009

Я написал инструментальную панель Mac OS X, чтобы показать стиль StackOverflow вас и других людей.

Моя проблема в том, что всякий раз, когда я обновляю этот виджет до новой версии, все предыдущие экземпляры удаляются, и на панели инструментов создается один новый экземпляр. Поэтому, если вы ранее следовали чутью четырех человек, вам придется воссоздать виджеты и снова ввести их идентификаторы пользователей. (

Есть ли способ сохранить все запущенные экземпляры при обновлении виджета?

Проверяя файл настроек, я вижу, что новый экземпляр создается после развертывания новой версии виджета. Это по замыслу? Случайно ли работают все виджеты? Если да, то можно ли это как-то обойти вручную?

Вы можете найти соответствующий виджет, включая файлы проекта, по адресу http://widget.huxhorn.de

Я изменил код в remove () на установил в настройках правильных значений вместо null , как предлагается ниже - но это тоже не помогает.
В чем моя ошибка ?? Помогите! Я застрял!


Другая проблема моего виджета была исправлена:
Я случайно позвонил

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

вместо

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

но теперь это исправлено (еще не выпущено).

Ответы [ 2 ]

1 голос
/ 12 августа 2009

Я знаю об этом инструменте, который берет на себя процесс установки: http://junecloud.com/software/mac/smart-widget-installer.html

alt text
(источник: junecloud.com )

0 голосов
/ 21 июня 2009

Я думаю, что ваши вызовы setPreferenceForKey и preferenceForKey выглядят странно. Откуда это null взято? Разве они не должны выглядеть как

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

Имеет ли синтаксис null

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

в remove() удалить предпочтение? Наверное, это объяснит тебе ситуацию. При обновлении remove() вызывается surley, и, таким образом, при перезапуске виджета настройки исчезают.


Я думаю, что есть только один способ сохранить ваши настройки во время обновления. Создайте один ключ предпочтения, не полагаясь на dashboard.createInstancePreferenceKey, но вместо этого подумайте об уникальном значении ключа.

В этом ключе preference вы можете сохранить все когда-либо введенные идентификаторы пользователей (в любом случае) с растущим (скажем, через запятую) списком. Когда экземпляр виджета открыт, а widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey)) еще не установлен, вы можете позволить пользователю выбрать один из них, предоставив ему выбор или что-то подобное

Я просто подумал, что, возможно, процесс обновления достаточно хорош, чтобы перенести настройки в новую версию. Даже если вы не удалите настройки, я думаю, что widget.identifier (createInstancePreferenceKey) изменится, поэтому вы не сможете получить доступ к «старым» настройкам.

...