小编Spe*_*ood的帖子

当NSMenu在Swift中打开时,NSTimer不会触发

我有一个计时器,一旦它关闭就会运行以重启警报.

alarm = NSTimer.scheduledTimerWithTimeInterval(
    60 * minutesConstant + secondsConstant,
    target:self,
    selector: Selector("endSession"),
    userInfo: nil,
    repeats:false)
Run Code Online (Sandbox Code Playgroud)

它的选择器函数设置一个模式标志,并调用原始函数,用新的分钟和秒常量设置警报,并发送会话已重新启动的用户通知.

我有一个菜单项,可以使用剩余时间进行更新

在此输入图像描述

所以我一直打开它来检查我的闹钟确实重启,并且一旦它达到零就会显示通知.它可以工作,但是当我打开菜单并且它降到零时它只停留在0:00并且计时器不会触发,直到我点击菜单,此时它立即显示通知并重置计时器.

当菜单打开时,如何强制定时器触发?这不是什么大不了的事,但我不希望用户与会话混淆,如果他们看到计时器停机就会挂起.

macos xcode nstimer nsrunloop swift

8
推荐指数
1
解决办法
1379
查看次数

在菜单当前快速打开时从 NSTimer 动态更新 NSMenuItem?

所以这是我的情况,我有一个小应用程序可以跟踪你工作了多长时间,并让你知道什么时候休息。我有一个 NSTimer 每秒触发一次并更新一些数字(剩余时间)。该应用程序位于状态栏中,我希望剩余时间显示在状态菜单下拉菜单中的菜单项中。现在我将它更新到 NSMenuItem 并且它可以工作,但是当您单击菜单栏中的图标以获取菜单时,当您查看它时,时间不会动态更新。如果您更改焦点然后返回菜单,则时间保持正确,但同样,当菜单打开时,它不会更新。

无论如何,即使菜单快速打开,我也可以让 MenuItem 更新吗?还有其他几个具有客观 C 解决方案的线程,但我无法快速调整它们。

macos nstimer nsmenuitem swift

5
推荐指数
1
解决办法
922
查看次数

Ruby中的模块方法和类方法之间的实际区别是什么?

之间有什么区别

module Logging
  def self.log
    if @logger.nil?
      @logger = Logger.new STDOUT
    end
    @logger
  end
end
Run Code Online (Sandbox Code Playgroud)

和这个?

class Logging
  def self.log
    if @logger.nil?
      @logger = Logger.new STDOUT
    end
    @logger
  end
end
Run Code Online (Sandbox Code Playgroud)

他们似乎都在做同一件事。为什么我要选择一个?

ruby module class

3
推荐指数
1
解决办法
1808
查看次数

Python3 - 在字符串格式化程序参数中使用变量

我有一些格式化的列,我正在打印.我想使用以下变量来设置.format参数的长度

number_length = 5
name_length = 24
viewers_length = 9
Run Code Online (Sandbox Code Playgroud)

我有

print('{0:<5}{1:<24}{2:<9}'.format(' #','channel','viewers'), end = '')
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想要像

print('{0:<number_length}{1:<name_length}{2:<viewers_length}'.format(
     ' #','channel','viewers'), end = '')
Run Code Online (Sandbox Code Playgroud)

但这给了我一个无效的字符串格式化程序错误.

我在变量和括号之前尝试了%,但没有运气.

python printing string format

2
推荐指数
1
解决办法
472
查看次数

在单元测试中模拟 python 类并验证实例

我正在尝试对一个 SFTP 帮助程序类进行单元测试,该类对 pysftp 模块进行一些调用。我想模拟来自 pysftp 的实际网络调用,因此没有副作用,只需确保该类使用正确的参数正确调用底层 SFTP 方法。

到目前为止,这是我的代码的一个简单示例:

import pysftp
import unittest
import mock

class SFTPHelper(object):
    def __init__(self, host, username, password, files_dir):
        self.host = host
        self.username = username
        self.password = password
        self.files_dir = files_dir

    def list_files(self):
        with pysftp.Connection(
                self.host,
                username=self.username,
                password=self.password) as sftp:
            return sftp.listdir(self.files_dir)

class TestSFTPHelper(unittest.TestCase):
    @mock.patch('pysftp.Connection')
    def test_list_files(self, mock_connection):
        sftp_helper = SFTPHelper('somehost', 'someuser', 'somepassword', '/some/files/dir')
        sftp_helper.list_files()

        # this assertion passes
        mock_connection.assert_called_with(
            'somehost', password='somepassword', username='someuser')

        # this assertion does not pass
        mock_connection.listdir.assert_called_with('/some/files/dir')
Run Code Online (Sandbox Code Playgroud)

断言错误:

AssertionError: Expected call: listdir('/some/files/dir') …
Run Code Online (Sandbox Code Playgroud)

python unit-testing mocking pysftp

1
推荐指数
1
解决办法
1623
查看次数