切入正题,然后:
第一个片段(AppDelegate):
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
//...code taken out...
[NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *incomingEvent) {
if ([incomingEvent type] == NSKeyDown) {
NSUInteger flags = [incomingEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask;
if (flags==NSCommandKeyMask && ([incomingEvent keyCode] == 8)) {
[ClipboardUtilities logger:@"cmd+c recognized"];
[self determineAndAddToHistory];
}
}
}];
}
第二个片段(AppDelegate):
-(void) determineAndAddToHistory {
id clipDat = [ClipboardUtilities getClipboardDataNatively];
if ([clipDat isKindOfClass:[NSAttributedString class]])
NSLog(@"clipDat.string = %@",((NSAttributedString*)clipDat).string);
}
第三个片段(ClipboardUtilities 类):
+(id) getClipboardDataNatively {
NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
NSArray *classArray = @[[NSAttributedString class], [NSImage class]];
NSDictionary *options = [NSDictionary dictionary];
NSArray *objectsToPaste = nil;
BOOL ok = [pasteboard canReadObjectForClasses:classArray options:options];
if (ok) {
objectsToPaste = [pasteboard readObjectsForClasses:classArray options:options];
}
NSLog(@"objectsToPaste count = %li",[objectsToPaste count]);
return [objectsToPaste objectAtIndex:0];
}
我注意到一些奇怪的行为,我将尝试用一个例子来解释:
输入
- Cmd+C 字符串“A”
- Cmd+C 字符串“B”
- Cmd+C 字符串“C”
- Cmd+C 字符串“D”
从确定AndAddToHistory 的输出
- 一个
- 一个
- 乙
- C
所以我注意到它出于某种原因保留了第一个项目......然后每次都返回我第二个最近的项目。我尝试在 getClipboardDataNatively 方法中输出 objectsToPaste 数组,但仍然如此。有人可以让我知道我将如何解决这个问题,或者他们是如何解决的吗?
PS 我的 ClipboardUtilities 类没有实现任何委托,或者继承自 NSObject 以外的任何东西。