在运行时更新默认打印机名称
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:@{}];
现在,我有几行 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:@{}];