我有一个不露面的Mac OS X应用程序,该应用程序需要复制其他应用程序中的选择。我是通过模拟CMD + C击键来实现的。它完美地工作。
但是,我认为这是至关重要的副作用。未经用户许可,它将覆盖用户的粘贴板。
因此,我在考虑复制选择之前应该先保存剪贴板内容,然后再将其还原。有人可以给我一些提示,也许是示例代码吗?

最佳答案

这是我为此编写的有关NSPasteboard的类别。看来效果很好。

@implementation NSPasteboard (SaveAndRestore)

// save current contents as an array of pasteboard items
- (NSArray *)save
{
    NSMutableArray *archive=[NSMutableArray array];
    for (NSPasteboardItem *item in [self pasteboardItems])
    {
        NSPasteboardItem *archivedItem=[[NSPasteboardItem alloc] init];
        for (NSString *type in [item types])
        {
            /* The mutableCopy performs a deep copy of the data. This avoids
               memory leak issues (bug in Cocoa?), which you might run into if
               you don't copy the data. */
            NSData *data=[[item dataForType:type] mutableCopy];
            if (data) { // nil safety check
                [archivedItem setData:data forType:type];
            }
        }
        [archive addObject:archivedItem];
    }
    return archive;
}

// restore previously saved data
- (void)restore:(NSArray *)archive
{
    [self clearContents];
    [self writeObjects:archive];
}

@end

关于cocoa - 如何先保存粘贴板内容,然后再将其还原?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6118435/

10-12 17:49