如何解决如何先保存粘贴板内容,然后再将其还原?
| 我有一个不露面的Mac OS X应用程序,该应用程序需要复制其他应用程序中的选择。我是通过模拟CMD + C击键来实现的。它运作完美。 但是,我认为这是至关重要的副作用。未经用户许可,它将覆盖用户的粘贴板。 因此,我在考虑复制选择之前应该先保存剪贴板内容,然后再将其还原。有人可以给我一些提示,也许是示例代码吗?解决方法
这是我在ѭ0上写的一个类别,用于执行此操作。看来效果很好。
@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
,看NSPasteboard
。
+[NSPasteboard generalPasteboard]
将为您提供共享的粘贴板,您可以使用该类来获取和设置内容。
,使用对象关联的其他自包含实现:
#import <objc/runtime.h>
static void * kArchiveKey = &kArchiveKey;
@implementation NSPasteboard (SaveRestore)
- (void)setArchive:(NSArray *)newArchive
{
objc_setAssociatedObject(self,kArchiveKey,newArchive,OBJC_ASSOCIATION_RETAIN);
}
- (NSArray *)archive
{
return objc_getAssociatedObject(self,kArchiveKey);
}
- (void)save
{
NSMutableArray *archive = [NSMutableArray array];
for (NSPasteboardItem *item in [self pasteboardItems]) {
NSPasteboardItem *archivedItem = [[NSPasteboardItem alloc] init];
for (NSString *type in [item types]) {
NSData *data = [item dataForType:type];
if (data) {
[archivedItem setData:data forType:type];
}
}
[archive addObject:archivedItem];
}
[self setArchive:archive];
}
- (void)restore
{
[self clearContents];
[self writeObjects:[self archive]];
}
@end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。