为什么 Spec 2 应用程序的这种样式不起作用?

Why this styling of Spec 2 app does not work?

我正在尝试向 SpTextPresenter 添加样式(Pharo 9,规范 2,Windows 10)。我有 MyApp class:

SpApplication subclass: #MyApp
    instanceVariableNames: ''
    classVariableNames: ''
    package: 'MyAdm'

使用 class 方法 uniqueInstance(和 class 实例 - “单例”想法是从 LibC 复制粘贴的):

uniqueInstance
    ^ uniqueInstance ifNil: [ uniqueInstance := self new ]

和一个实例方法initialize:

initialize
    super initialize.
    self useBackend: #Morphic with: MyAppConfiguration new.

MyAppConfiguration class:

SpMorphicConfiguration subclass: #MyAppConfiguration
    instanceVariableNames: ''
    classVariableNames: ''
    package: 'MyAdm'

使用方法 configure:

configure: anApplication
    super configure: anApplication.
    self styleSheet addClass: 'text' with: [ :style |
        style addPropertyFontWith: [ :font |
            font bold: true;
                  size: 20;
                  name: 'Courier'
        ].
    ].

我在代码中的某处做的:

.....
    "presenterClass is an argument which is a class of my presenter"
    presenter := MyApp uniqueInstance newPresenter: presenterClass.
    presenter openWithSpec.
    presenter updatePresenter.
....

我有几个演示者,但其中一个确实包含 text 变量,该变量是在 initializePresenters 方法中创建的:

initializePresenters
    text := self newText addStyle: 'text'.
    super initializePresenters

但结果很糟糕 - text 有标准视图,有标准字体,没有任何改变!错误在哪里?我想在 textSpTextPresenter 类型)中看到我的自定义字体。

编辑: 顺便说一句, 也不起作用。

下面是我从新手角度理解的故障原因

  1. 我写了一个单例(uniqueInstance)
  2. 然后我添加了实现样式功能的代码的其他部分
  3. 没用
  4. 我的理解是 uniqueInstance 并不是每次我 运行 我的应用程序时都重新创建的。我添加了 uniqueInstance := nil,我发现样式开始起作用了。也许 uniqueInstance 保存在图像中(?),当我添加所需的代码部分时,应用程序继续使用图像中的旧 uniqueInstance?我不确定...但是将其分配给 nil 解决了问题。
  5. 因此,我决定避免这种单例方法并显式创建应用程序实例。
  6. 老实说,问题中的代码没有帮助 - 但 工作正常。

是的,如果您声明一个单例并保存图像,它会在会话之间保持活动状态。 与 Pharo 中的任何东西一样,因为它是一个实时环境
现在,这个问题让我觉得你缺乏 Pharo 的基础知识。正如我之前在这里(在其他问题中)所说,通过 Whosebug 学习 并不是学习 Pharo 的最佳方式。
看看这个网站:https://pharo.org/documentation,那里有很多学习资源。
此外,还有一个 Discord 服务器,您可以在那里提出任何问题,那里会有很多人愿意帮助您(包括我):https://discord.gg/QewZMZa