Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 多个仪表板小部件实例在小部件更新后无法生存。有什么办法防止这种情况发生吗?_Javascript_Macos_Dashcode_Mac Dashboard Widget - Fatal编程技术网

Javascript 多个仪表板小部件实例在小部件更新后无法生存。有什么办法防止这种情况发生吗?

Javascript 多个仪表板小部件实例在小部件更新后无法生存。有什么办法防止这种情况发生吗?,javascript,macos,dashcode,mac-dashboard-widget,Javascript,Macos,Dashcode,Mac Dashboard Widget,我写了一个MacOSX仪表板来展示你自己和其他人的StackOverflow天赋 我的问题是,每当我将小部件更新为新版本时,所有以前的实例都会被删除,并且在仪表板上创建一个新实例。因此,如果您之前遵循了4个人的天赋,则必须重新创建小部件并再次输入他们的用户ID: 在更新小部件时,有没有办法保持所有正在运行的实例 检查preferences文件,我看到在部署新版本的小部件后创建了一个新实例。这是故意的吗?所有小部件都是这样工作的吗??如果是这样的话,是否可以手动规避 您可以在以下位置找到有问题的小

我写了一个MacOSX仪表板来展示你自己和其他人的StackOverflow天赋

我的问题是,每当我将小部件更新为新版本时,所有以前的实例都会被删除,并且在仪表板上创建一个新实例。因此,如果您之前遵循了4个人的天赋,则必须重新创建小部件并再次输入他们的用户ID:

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

检查preferences文件,我看到在部署新版本的小部件后创建了一个新实例。这是故意的吗?所有小部件都是这样工作的吗??如果是这样的话,是否可以手动规避

您可以在以下位置找到有问题的小部件,包括项目文件:

我已经更改了remove中的代码,将首选项设置为正确的值,而不是下面建议的null-但是这也没有帮助。 我犯了什么错??帮助我卡住了

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

widget.preferenceForKey(null, dashcode.createInstancePreferenceKey(userIdPrefKey));
而不是

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

但是这个问题现在已经解决了,还没有发布。

我觉得你调用setPreferenceForKey和preferenceForKey看起来很奇怪。那是从哪里来的。他们不应该看起来像吗

widget.preferenceForKey(dashcode.createInstancePreferenceKey(userIdPrefKey))
widget.setPreferenceForKey(value, dashcode.createInstancePreferenceKey(userIdPrefKey));
语法是否为null

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

我想只有一种方法可以在更新期间保留您的首选项。在不依赖dashboard.CreateInstanceReferenceKey的情况下创建一个preferencekey,但应将自己视为唯一的键值

在这个preferenceKey中,您可以使用一个不断增长的逗号分隔列表保存任何实例输入的所有用户ID。打开小部件实例时,如果尚未设置widget.preferenceForKeydashcode.CreateInstanceReferenceKeyUserIdPrefKey,您可以让用户通过给他一个select或类似的选项来选择其中一个


我只是在想,也许更新过程足够好,可以将首选项迁移到新的verison。即使您不删除首选项,我认为widget.identifier CreateInstanceReferenceKey也会更改,因此您无法访问旧设置。

我知道这个工具接管了安装过程:


来源:

好主意,我试过了,并将代码更改为-再次-将首选项设置为正确的值。。。没有帮助:该代码最初是为了在小部件之后进行清理,这样就不会从已删除的小部件实例中留下任何未使用的pref…将值设置为null是可以的。一个新的实例是在更新的情况下创建的,所以我想删除以前实例的值是一种方法。我知道这一点。在修改后的回答中提出了另一个解决方案我刚刚提出了一个后续问题:我认为这对于保持/恢复以前的实例是必要的。谢谢你和我一起讨论这个话题。
widget.setPreferenceForKey(null, dashcode.createInstancePreferenceKey(userIdPrefKey))