在运行时更新默认打印机名称

Update default printer name during runtime

现在,我有几行 ObjC 来轮询正在设置的默认打印机,并且在我的应用程序中它应该使用新打印机的名称更新标签,但到目前为止它还没有工作。

在我的控制器中,我有以下内容:

[self updatePrinter];

它调用了这个小方法:

- (void)updatePrinter {
    NSPrintInfo *printInfo = [NSPrintInfo sharedPrintInfo];
    self.printerName.stringValue = printInfo.printer.name;

    NSLog(@"Printer: %@", printInfo.printer.name);
}

当它遇到我的方法时(在 viewDidLoad 中),它将正确填充标签 printerName

我尝试添加一个计时器来轮询正在设置的新打印机默认设置:

[NSTimer scheduledTimerWithTimeInterval:2.0
                                 target:self
                               selector:@selector(updatePrinter)
                               userInfo:nil
                                repeats:YES];

它运行正确,但如果我打开系统偏好设置并更改默认打印机,它会继续打印旧默认打印机的名称。如果我重新启动应用程序,它的行为只会有所不同。

如何让新的默认值在运行时反映在我的应用程序中?

不要再次使用相同的 NSPrintInfo 对象,而是使用

创建一个新对象
[[NSPrintInfo alloc] initWithDictionary:@{}];