如何检查NSPasteboard是否已更新?

Ben*_*ard 4 cocoa objective-c nspasteboard

我正在自动执行复制命令,每隔一秒左右在粘贴板上放置一些文本 - 不幸的是,这是我访问文本的唯一方法,这是在另一个应用程序中.复制后,我访问粘贴板文本并进行处理.

有时,复制命令将在未选择任何内容时发送 - 例如在textEdit中,如果光标位于一行的末尾(而不是突出显示某些文本)并且您点击了复制,则会发出系统蜂鸣声,因为没有选择任何内容复印.粘贴板不会更新并保留其以前的数据.

我无法想出一种创造性的方法来确定何时发生这种情况.如果我发送一个复制命令并且粘贴板没有更新,我可以访问的粘贴板上是否有任何类型的时间戳,以确认是否已捕获某些内容?

我正在看changeCount,但我不确定究竟是什么,文档对我没有多大帮助 - 红鲱鱼?

任何简单有效的想法都会感激不尽!

Ale*_*ton 11

我不相信存在此通知,但您可以轮询粘贴板.

pasteboard = [[NSPasteboard generalPasteboard] retain];
[NSTimer scheduledTimerWithTimeInterval:0.25 target:self
                               selector:@selector(pollPasteboard:)
                               userInfo:nil repeats:YES];

- (void)pollPasteboard:(NSTimer *)timer {
    NSInteger currentChangeCount = [pasteboard changeCount];
    if (currentChangeCount == previousChangeCount)
        return;
    NSLog(@"Pasteboard updated: %@", [pasteboard types]);
    previousChangeCount = currentChangeCount;
}
Run Code Online (Sandbox Code Playgroud)

  • 我不同意它没有效率,但你会怎么做呢? (4认同)
  • 除非你绝对必须,否则请避免投票.它在各方面都是低效的. (2认同)