Objective c CGKeyEvent粘贴使用断点,但不能不使用断点

Objective c CGKeyEvent粘贴使用断点,但不能不使用断点,objective-c,cocoa,macos,breakpoints,Objective C,Cocoa,Macos,Breakpoints,关于这个话题,我在StackOverflow上搜索了很多。到目前为止,我的发现非常有用。但现在,我发现了一个非常有趣的事实 在我的例子中,我通过NSApp hide:self 然后我向粘贴板添加一个字符,然后尝试通过CGEvents在最前面的应用程序中输入它。我的代码如下: -(void)applicationDidHide:(NSNotification *)notification{ stringToInsert = @"©"; NSPasteboard *pasteboa

关于这个话题,我在StackOverflow上搜索了很多。到目前为止,我的发现非常有用。但现在,我发现了一个非常有趣的事实

在我的例子中,我通过
NSApp hide:self

然后我向粘贴板添加一个字符,然后尝试通过CGEvents在最前面的应用程序中输入它。我的代码如下:

-(void)applicationDidHide:(NSNotification *)notification{
    stringToInsert = @"©";

    NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
    [pasteboard clearContents];
    NSArray *copiedObjects = [NSArray arrayWithObject:stringToInsert];
    [pasteboard writeObjects:copiedObjects];

    //Use CGEvents to "press" Cmd-V
    CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
    CGEventRef pasteCommandDown = CGEventCreateKeyboardEvent(source, (CGKeyCode)9, YES);
    CGEventSetFlags(pasteCommandDown, kCGEventFlagMaskCommand);
    CGEventRef pasteCommandUp = CGEventCreateKeyboardEvent(source, (CGKeyCode)9, NO);

    CGEventPost(kCGAnnotatedSessionEventTap, pasteCommandDown);
    CGEventPost(kCGAnnotatedSessionEventTap, pasteCommandUp);

    CFRelease(pasteCommandUp);
    CFRelease(pasteCommandDown);
    CFRelease(source);

}
我的问题是,当我在XCode中运行文本时,它不想插入文本,而没有断点。如果mac的操作系统无法胜任的话,这反而会让他“砰砰”作响

但是如果我为方法本身设置了一个断点,然后逐行跳转,它会好奇地在瞬间插入它

很抱歉我的英语不好,也很抱歉我的文本格式可能不好,因为我是stackoverflow的新手


如果你能帮忙,我会非常感激的

我以前看到过这一点,我的猜测是事件发布得太快,系统无法处理(因为它实际上只需要每秒处理不超过20个关键事件)。我想输入类似于usleep(100000)
(暂停线程1/10秒)的内容会有很大帮助。

谢谢!遗憾的是,它不能直接解决问题,但令人高兴的是,它有助于确定问题。我指定了相当长的时间,多了一个0,所以应该是一秒钟。然后我试了一下,发现焦点并没有真正转移到下一个窗口。我不知道为什么,因为正如前面提到的,如果我使用断点,焦点将传递到底层窗口。我想知道,因为整个代码块是在应用程序隐藏时调用的,所以焦点应该已经改变了。那么,如何让焦点改变,然后调用代码块呢?谢谢你!