标签: nspasteboard

每当写入NSPasteboard时,我都可以收到回调吗?

我读过Apple的" 纸板编程指南",但它没有回答我的特定问题.

我正在尝试编写一个Cocoa应用程序(用于OS X,而不是iOS),它将跟踪写入普通粘贴板的所有内容(因此,无论何时任何应用程序复制和粘贴,但不是,例如,拖放,也使用NSPasteboard).我可以(几乎)通过基本轮询后台线程上的常规粘贴板并检查changeCount来完成此操作.当然,这样做会让我觉得内心很脏.

我的问题是,有没有办法让粘贴板服务器在对普通粘贴板进行更改时通过某种回调通知我?我在NSPasteboard类引用中找不到任何内容,但我希望它潜伏在其他地方.

我可以想象实现这一点的另一种方法是,如果有一种方法可以将一般的粘贴板实现替换为NSPasteboard的子类,我可以定义自己来发出回调.也许这样的事情可能吗?

如果公共的App Store合法API可以实现这一点,我会更加喜欢,但如果需要使用私有API,我也会这样做.

谢谢!

macos cocoa nspasteboard

41
推荐指数
4
解决办法
7873
查看次数

NSPasteboard和简单的自定义数据

我正在努力让NSPasteboard工作,所以原谅我缺乏理解.

我想要的只是一种从粘贴板中编写和检索仅适用于我的应用程序的NSUInteger值的简单方法.我正在做的就是拖动我的应用程序中的项目,所以我在粘贴板中需要的只是项目的ID.

我已经尝试过研究NSPasteboardItemDataProvider和NSPasteboardItem以及NSData,但是他们都有这么简单的做事的复杂方式.事实上,我不知道做这么简单的事情的正确方法是什么 - 每个样本周围似乎都处理字符串类型,或者更复杂的东西.即使代码中没有警告,[NSMutable SetData]选择器似乎也不存在.

如果有人能指出我正确的方向,我将非常感激.:)

编辑:我正在使用[dragImage ...]来帮助我进行拖动操作.

macos cocoa nspasteboard

17
推荐指数
1
解决办法
5982
查看次数

从nspasteboard获取字符串

也许这是一个漫漫长夜,但我无法理解如何检查剪贴板中的字符串

我一直在阅读NSPasteboard文档..

有人可以帮助我吗?

clipboard objective-c nspasteboard

14
推荐指数
1
解决办法
6868
查看次数

如何先保存粘贴板内容并在之后恢复?

我有一个不露面的Mac OS X应用程序,需要从其他应用程序复制选择.我通过模拟CMD + C键击实现了这一点.它完美地运作.但有一个,我认为这是至关重要的副作用.它会在未经许可的情况下覆盖用户的粘贴板.所以我在复制选择之前想到的是我应该保存粘贴板内容然后恢复它.有人可以给我一些提示,也许是示例代码?

macos cocoa copy-paste nspasteboard

10
推荐指数
2
解决办法
1130
查看次数

如何在Mac OS X 10.5中处理来自Finder的多个文件拖放?

我需要从Finder中将所有文件的URL拖放到我的应用程序中.

我有一个运行在10.6上的Cocoa应用程序通过使用新的10.6 NSPasteboard API来处理粘贴板上的多个项目.我正在尝试将此应用程序向后移植到10.5.我如何在10.5上处理这个问题?

如果我执行下面的操作,我只会获得第一个网址:

    NSArray *pasteTypes = [NSArray arrayWithObjects: NSURLPboardType, nil];
    NSString *bestType = [pboard availableTypeFromArray:pasteTypes]; 
    if (bestType != nil) {
        NSURL *url = [NSURL URLFromPasteboard:pboard];
    }        
Run Code Online (Sandbox Code Playgroud)

macos cocoa finder drag-and-drop nspasteboard

9
推荐指数
2
解决办法
4716
查看次数

Swift 3将字符串复制到剪贴板

你如何使用Xcode 8和Swift 3在macOS 10.12中使用Copy字符串Clipboard?我找不到任何参考资料.

nspasteboard swift3 macos-sierra xcode8

9
推荐指数
2
解决办法
3835
查看次数

如何使用Cocoa将文本从一个应用程序粘贴到另一个应用程序

NSPasteBoard在Apple文档中已经了解了它,以及它如何允许应用程序写入PasteBoard并允许其他应用程序读取该文本并使用它.

有人可以告诉我如何将应用程序(位于状态栏中)的文本粘贴到NSTextField不同应用程序中的文本中.

我想要做的是与SnippetSnippetsApp类似的东西.

如果我完全愚蠢并且错过了Apple Docs中的明显内容,请你指点我正确的道路:)

谢谢!

macos cocoa copy paste nspasteboard

8
推荐指数
2
解决办法
2881
查看次数

拖动文件遇到沙箱(__ CFPasteboardIssueSandboxExtensionForPath)

我处理了从浏览器视图到自定义视图的拖动操作.它在雪地上工作得很好,但在带有沙箱的Mountain Lion中却没有.

in browser view:
    NSMutableArray* urls = [[[NSMutableArray alloc] init] autorelease];
..............put some NSUrl to urls array....................
    [pasteboard writeObjects:[NSArray arrayWithArray:urls]];

in my receive custom view:
    NSArray* pasteboardItems = [pasteboard readObjectsForClasses:[NSArray arrayWithObject:[NSString class]] options:nil];
    NSArray* pasteboardItems2 = [pasteboard readObjectsForClasses:[NSArray arrayWithObject:[NSURL class]] options:nil];
    NSArray* pasteboardItems3 = [pasteboard readObjectsForClasses:[NSArray arrayWithObject:[NSImage class]] options:nil];
    NSLog(@"%@",pasteboardItems);
    NSLog(@"%@",pasteboardItems2);
    NSLog(@"%@",pasteboardItems3);
my log is:
    2012-08-09 18:33:43.886 iCollage[6885:303] __CFPasteboardIssueSandboxExtensionForPath: error for [/Users/xxxx/Library/Containers/xxxxxxxxxxxx/Data/Downloads/1343902069.jpg]
    2012-08-09 18:33:44.546 iCollage[6885:303] ( "file://localhost/Users/xxx/Library/Containers/xxxxxxxx/Data/Downloads/1343902069.jpg")
    2012-08-09 18:33:44.547 iCollage[6885:303] ( "file://localhost/Users/xxxxx/Library/Containers/xxxxxx/Data/Downloads/1343902069.jpg")
    2012-08-09 18:33:44.547 iCollage[6885:303] ()
Run Code Online (Sandbox Code Playgroud)

我的问题是:

1.如何解决这个错误__CFPasteboardIssueSandboxExtensionForPath;我参考文档并没有发现任何关于那个.我有权获得访问该文件的权限!谷歌说,可能是"startAccessingSecurityScopedResource"会帮助我,然后我尝试失败

2.为什么pasteboardItems2有价值?我只写了粘贴板但不是字符串.我很反感我可以从NSString类型和NSUrl类型获取url!(我尝试从iFinder拖动文件,网址只存在于pasteboardItems中,但不存在于pasteboardItems2中.)有人知道为什么吗?我认为当有人帮助我解决这个问题时,第一个问题会自动解决.

macos cocoa sandbox objective-c nspasteboard

8
推荐指数
1
解决办法
1640
查看次数

确定当前粘贴板内容的源应用程序

来自AppStore的几个OSX剪贴板管理器显示了确定复制到剪贴板的内容的源应用程序的能力.

我正在编写一些简单的剪贴板观察器,并希望在内容附近显示源应用程序图标,存储在一般的NSPasteboard中.我想知道如何实现这一目标.

据我所知,除了数据类型和数据本身之外,NSPasteboard不提供任何其他信息.

也许有一些事件或通知知道"复制"命令被触发了?还是其他一些方法?

cocoa copy nspasteboard

6
推荐指数
1
解决办法
403
查看次数

在macOS上使用Swift 3从剪贴板中读取

我是Swift的初学者,我正在试图弄清楚如何在macOS(Swift 3)上阅读已复制到剪贴板的内容?我经常搜索,但似乎找不到任何有用的东西.

我在网上试过的一些事情:

var pasteboardItems: [NSPasteboardItem]? { get }
print("\(pasteboardItems)")
Run Code Online (Sandbox Code Playgroud)

let pb = NSPasteboard.general()
pb.string(forType: NSPasteboardTypeString)

print("\(pb)")
Run Code Online (Sandbox Code Playgroud)

let pasteboard = UIPasteboard.general
if let string = pasteboard.string {
    // text was found and placed in the "string" constant
}
Run Code Online (Sandbox Code Playgroud)

最后

func paste(sender: AnyObject?) {

    let pasteboard = NSPasteboard.generalPasteboard()

    if let nofElements = pasteboard.pasteboardItems?.count {

        if nofElements > 0 {


            // Assume they are strings

            var strArr: Array<String> = []
            for element in pasteboard.pasteboardItems! {
                if let str = element.stringForType("public.utf8-plain-text") …
Run Code Online (Sandbox Code Playgroud)

macos nspasteboard swift swift3

6
推荐指数
3
解决办法
5598
查看次数