如何收集多个 openFile:(NSString *) 事件,然后对它们执行某些操作?

2024-03-14

我正在开发 Cocoa / Objective C++ 实用程序应用程序,并且想要处理多个(瞬时)文件打开。为了处理文件打开部分,我在我的AppDelegate.mm file:

- (BOOL)application:(NSApplication*)app openFile:(NSString *)filename
{
    NSLog(@"Opening file %@", filename);

    // more C++ code here

    return YES;
}

这些文件正在发送到 Quicksilver,我相信 Quicksilver 会将文件一个接一个地发送到应用程序(我认为 Finder 的“打开方式”会一次发送所有文件 - 因此可能使用handleOpenApplicationEvent:(NSAppleEventDescriptor *)event可能会更好) - 但无论如何,应用程序将一个接一个地接收多个文件 - 几乎是瞬时的 - 但不完全一起。这是 Console.app 显示的内容:

console-screenshot.png http://img109.imageshack.us/img109/1205/consolescreenshot.png http://img109.imageshack.us/img109/1205/consolescreenshot.png

由于文件是单独发送的,但是一个接一个地发送,我的问题是如何收集所有发送的文件并用它们做一件事?例如,我想收集发送的所有文件路径,然后将它们一起显示在对话框中。

我可以想到一个可能有效的概念:在接收到每个文件路径时将其存储在数组中。同时,当收到第一个时,在后台设置 1-2 秒的延迟,然后有一个对话框显示特定变量的所有内容。这个概念正确吗?或者有更好的方法吗?我是 Cocoa / Objective C++ 的新手 - 来自 PHP / Perl、bash 等语言。

我还想让这个辅助应用程序在完成后终止,但如果我正在等待文件,如何在收到最后一个文件时终止该应用程序?

如果我添加[NSApp terminate:nil]; to the applicationDidFinishLaunching函数应用程序实际上在仅收到第一个文件后终止。

更新 - 更多注释

这是使用后的控制台openFiles(复数)功能:图片7.png http://img24.imageshack.us/img24/5715/picture7zc.png http://img24.imageshack.us/img24/5715/picture7zc.png

使用 Quicksilver,我抓取一些文件,例如临时目录中的文件,然后选择“打开方式”,然后选择我正在创建的应用程序(名为 darn.app)

屏幕截图 2012-01-18 7.02.45 PM.png http://img9.imageshack.us/img9/4171/screenshot20120118at702.png http://img9.imageshack.us/img9/4171/screenshot20120118at702.png

但使用 Finder 似乎效果很好:

屏幕截图 2012-01-18 7.09.08 PM.png http://img832.imageshack.us/img832/8858/screenshot20120118at709.png http://img832.imageshack.us/img832/8858/screenshot20120118at709.png

...consolea.app 中的结果:

图片8.png http://img24.imageshack.us/img24/2812/picture8fe.png http://img24.imageshack.us/img24/2812/picture8fe.png

我确实询问了 Quicksilver 开发人员,他们确认 QS 确实通过“打开方式”操作一次打开一个文件,他们承认这与 Finder 的做法不同,但他们认为这是预期的。所以也许达伦是对的 - 计时器可能是最好的方法......


尝试实施-application:openFiles:代替-application:openFile:

- (void)application:(NSApplication *)sender openFiles:(NSArray *)filenames
{
    NSLog(@"Opening multiple files %@", filenames);
}

它处理从 Finder 接收多个文件。

如果这不适用于您的 Quicksilver 设置,那么计时器可能是最好的方法。

在 AppDelegate 的 -init 方法中设置计时器。

@implementation MyAppDelegate {
    NSMutableArray* _files;
}

- (id)init {
    if (self = [super init]) {
        _files = [[NSMutableArray alloc] initWithCapacity:10];

        [self performSelector:@selector(processFiles) 
                   withObject:nil 
                   afterDelay:1.0]; // one second delay
    }
    return self;
}

在-application:openFile中:将文件收集到数组中并重置计时器。

- (BOOL)application:(NSApplication*)app openFile:(NSString*)filename {
    NSAssert(_files != nil, @"Timer already fired");

    [_files addObject:filename];

    [NSObject cancelPreviousPerformRequestsWithTarget:self];
    [self performSelector:@selector(processFiles) 
               withObject:nil 
               afterDelay:1.0];
} 

当计时器触发时,处理收集的文件,然后退出应用程序。

-(void)processFiles

    // Process the _files

    [_files release];
    _files = nil;
    [NSApp terminate:nil];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何收集多个 openFile:(NSString *) 事件,然后对它们执行某些操作? 的相关文章

  • pip 安装 MySQL-python

    我正在尝试在 Mac OS 上安装 MySQLdb for Python 当我数字pip install MySQL pythonshell 返回这样的内容 Collecting MySQL python Using cached http
  • 在C语言中如何清屏? [复制]

    这个问题在这里已经有答案了 我想清除屏幕上的所有文字 我尝试过使用 include
  • 为什么 Mac OS 上的 C 运行时允许预组合和分解的 UTF-8?

    所以我们都知道 Mac OS 上的文件系统具有使用完全分解的 UTF 8 的古怪功能 如果您调用 POSIX API 例如realpath 例如 您将从 Mac OS 返回这样一个完全分解的 UTF 8 字符串 当使用像这样的 API 时f
  • 如何生成Mac应用程序的安装包?

    如何为 OS X 二进制文件以及一些配置和脚本文件创建单个安装程序包 最终文件夹应如下所示 任何帮助 将不胜感激 谢谢 如果您希望将各种东西放置在不同的位置 安装程序在这里 文档在那里 支持文件在这里等等 它们也非常适合提供安装体验的可配置
  • 对 boost 库的依赖项没有完整路径

    我已经成功构建了动态库 依赖于使用自定义前缀构建和安装的 boost 库 b2 install prefix PREFIX 然而 当我跑步时otool L在我的库中 我得到如下输出 libboost regex dylib compatib
  • 为什么我的 PyGame 应用程序根本不运行?

    我有一个简单的 Pygame 程序 usr bin env python import pygame from pygame locals import pygame init win pygame display set mode 400
  • 如何用Block简化回调逻辑?

    假设我需要与一个提供协议的类进行通信 并在操作完成时调用委托方法 如下所示 protocol SomeObjectDelegate required void stuffDone id anObject void stuffFailed e
  • npm install 不起作用,抛出错误

    我正在尝试在 nodejs 中安装 yo 和其他一些软件包 但是我不断收到错误 我是节点新手 所以我有点迷失 我运行的是 Mac OS X 10 10 3 我正在使用的命令是 sudo npm install global yo 这样做会给
  • 使用 mono/nunit-console/4 在 Mac OS X 控制台上运行测试

    我安装了 Max OS X 10 11 1 上面装有 Xamarin 我编写了简单的测试类 只是为了测试在 Mac OS X 和 Ubuntu 上运行 Nunit 测试 该类实际上有一个返回字符串的方法 using System names
  • 使用 Cocoa/OSX 合并/堆叠两个图像

    我有一个 CGImageRef 我们称之为原始图像 和一个透明 png 水印 我正在尝试编写一种方法将水印放置在原始内容之上 并返回 CGImageRef 在 iOS 中 我会使用 UIKit 将它们绘制到上下文中 但这在 OSX 中似乎不
  • 为每行 NSTableView 文本着色

    我有一个 NSTableView 它显示我拥有的对象数组 对于每个对象 行 我想根据在每个对象上运行的函数的结果来更改显示的文本的颜色 因此 例如表中存在于另一个列表 或其他一些要求 中的所有对象 我想以绿色文本显示它们 不存在的对象以红色
  • 为具有多个目标和不同平台的项目编写 Podfile

    我正在准备一个支持 OS X 和 iOS 的 Pod 我的 pod 有一些自己的依赖项 这些依赖项在 podspec 文件中定义 因此我使用 Podfile 来管理我用来开发 pod 和运行测试的项目的依赖项 我正在使用 CocoaPods
  • 无法使 csshX 在 Mac OS Big Sur 上运行

    csshX不适用于 Mac Big Sur 未实现 POSIX tmpnam 在 System Library Perl 5 28 darwin thread multi 2level POSIX pm 第 185 行使用 File Tem
  • git Push over sshfs 失败,并显示“关闭 sha1 文件时出错:错误的文件描述符”

    我们使用 sshfs 通过 SSH 安装文件系统 并将其用作 git 存储库协作的远程存储 Mac OSX 10 6 6 到 RHEL 3 服务器 SSHFS 版本 2 2 MacFUSE SSHFS 2 2 0 MacFUSE 库版本 F
  • java setFullScreenWindow 在 Mac 中隐藏登录对话框

    我使用的是全屏窗口 类似于屏幕保护程序 使用这里的方法 GraphicsEnvironment getLocalGraphicsEnvironment getDefaultScreenDevice setFullScreenWindow t
  • 在 Mac OS X 上安装 libxml2 时出现问题

    我正在尝试在我的 Mac 操作系统 10 6 4 上安装 libxml2 我实际上正在尝试在 Python 中运行 Scrapy 脚本 这需要我安装 Twisted Zope 现在还需要安装 libxml2 我已经下载了最新版本 2 7 7
  • 受信任的 1.5 小程序可以执行系统命令吗?

    如果是的话 这个能力有什么限制吗 具体来说 我需要以 Mac OSX 为目标 我以前用过这个在 Windows 系统上启动东西 但从未在 Mac 上尝试过 public void launchScript String args Strin
  • 如何用 kevent() 替换 select() 以获得更高的性能?

    来自Kqueue 维基百科页面 http en wikipedia org wiki Kqueue Kqueue 在内核和用户空间之间提供高效的输入和输出事件管道 因此 可以修改事件过滤器以及接收待处理事件 同时每次主事件循环迭代仅使用对
  • OSX 上的 locale.getlocale() 问题

    我需要获取系统区域设置来执行许多操作 最终我想使用 gettext 翻译我的应用程序 我打算在 Linux 和 OSX 上分发它 但我在 OSX Snow Leopard 上遇到了问题 python Python 2 5 2 r252 60
  • 使用 MacPorts 在 Mac OS X 10.5 上安装 PostgreSQL 时出错

    我已经使用 MacPorts 在几台不同的计算机上安装了 PostgreSQL 没有问题 但是当涉及到我自己的笔记本电脑时 我无法构建它 当我执行此命令时 sudo port install postgresql83 我收到此错误 chec

随机推荐

  • 发送文件到 Mule 入站端点

    我正在尝试将包含文件和两个输入的表单发送到 Mule 入站端点 我有一个自定义处理器和一个定义如下的流程
  • 如何在ggplot中缩放独立层的颜色?

    我有一个数据集 记录了三座建筑物的能源使用情况 我有一个融化的数据框 可以从钻石组中模仿 data lt melt diamonds c depth table cut color id c cut color 本质上 我有来自三个不同建筑
  • Stripe 订阅取消和重新激活模型的最佳实践

    我正在开发一个应用程序 该应用程序有 Stripe 的每月订阅计划 我正在创建一个客户然后订阅供用户订阅 这对我来说效果很好 但我还没有弄清楚如何使用 Stripe 订阅创建取消流程 我使用了取消订阅按钮stripe subscriptio
  • 目标元素位于其他元素之前

    在我对此进行研究的过程中 我偶然发现这个线程 https stackoverflow com questions 10225364 select specific element before other element 但由于它已有 2
  • 用户完成编辑后如何从 EditText 上移除焦点?

    我的布局上有一个 EditText 用户输入一些文本并点击 完成 键后 我想从中删除闪烁的光标 我搜索了 StackOverflow 并找到了 3 个对我不起作用的答案 闪烁的光标仍然存在 private class MyOnKeyList
  • 虚拟环境下降级Python版本

    关于 TensorFlow 我总是遇到同样的错误 ModuleNotFoundError No module named tensorflow contrib 我实际上使用的是Python版本3 9不过网上看的好像是这个版本3 7是最后一个
  • 从 WHERE 子句中包含 Varying IN 列表的表中进行 SELECT

    我在正在处理的项目中遇到一个问题 我无法给您实际的代码 但我创建了一个可执行的示例代码 如下所示 Here temp and temp id有两张桌子 temp表包含逗号分隔的 id 列表 即VARCHAR2 temp id表包含实际的 i
  • 如何从散列的散列中提取键名?

    我有以下哈希值 HoH flintstones gt husband gt fred pal gt barney jetsons gt husband gt george wife gt jane his boy gt elroy simp
  • phpseclib 给了我一个奇怪的错误

    我试图使用这个 但它只是给了我这个错误 我不知道如何解决这个问题 警告 include once Math BigInteger php 无法打开流 否 这样的文件或目录 home www sfs web statistics public
  • linq .Value 可空对象必须有一个值。如何跳过?

    我有一些 linq 代码 有时null cbo3 ItemsSource empty Union from a in from b in CompleteData select b TourOpID Distinct select new
  • 在Swift中实现UILabel动画效果的最佳方法?

    我对 Swift 动画还很陌生 并且知道如何去做 但想看看其他人会如何做 我正在尝试创建这样的效果 当用户进入搜索栏时 搜索栏的占位符文本会缩小并向上移动到搜索字段上方 并更改为不同的颜色 像这样 http magicus xyz http
  • [String] 的 Swift 扩展?

    我正在尝试编写一个扩展方法 String 看来你不能延长 String 直接 类型 元素 限制为非协议类型 字符串 尽管我遇到了这个技巧 protocol StringType extension String StringType 但我仍
  • 在世界地图上方可视化网络[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我在 NodeXL 中有一个网络数据集 我试图在世界地图上可视化它 我的数据集有 具有国家属性的节点 链接 节点之间的未加权连接 我尝
  • 如何在 MATLAB 中迭代 n 维矩阵中的每个元素?

    我有个问题 我需要在 MATLAB 中迭代 n 维矩阵中的每个元素 问题是 我不知道如何对任意数量的维度执行此操作 我知道我可以说 for i 1 size m 1 for j 1 size m 2 for k 1 size m 3 等等
  • 使用 Angular 4.4.6 的开发模式下没有 NgForm 错误提供程序

    EDIT 我已经发现是什么导致了这个问题 我现在正在寻找一个解决方案来满足它 NOTE 此问题发生在开发模式下 即不是生产模式 并且不使用 aot 我正在使用这里的 更新 解决方案 https stackoverflow com a 463
  • 带css的透明滚动条

    现在使用此代码 以及此代码的许多变体 但滚动轨道变为深灰色 例如 222222 或接近此颜色 找到很多例子 但它们都给出相同的结果 Opera Chrome 和 Firefox 均显示此错误 怎么修 style 3 webkit scrol
  • HSTS 安全标头中的 max-age 属性是什么?

    HSTS 中 max age 的目的是什么 例如 Strict Transport Security max age 100 如果该值超过 100 会发生什么 有没有设置 max age 的最佳实践 thanks 有语义上不同的方式来发送
  • MPI:广播 long long int

    这个程序估计Pi通过将随机 飞镖 采样点 扔到一个圆或半径 1内切于长度 2的方板内的圆上 利用关系 Area of circle Area of Square Pi 4 我们可以使用表示为的相同关系来估计 Pi Darts Inside
  • 如何动态导入模块并将其名称作为字符串?

    我正在编写一个 Python 应用程序 它将命令作为参数 例如 python myapp py command1 我希望应用程序是可扩展的 也就是说 能够添加实现新命令的新模块 而无需更改主应用程序源 这棵树看起来像 myapp init
  • 如何收集多个 openFile:(NSString *) 事件,然后对它们执行某些操作?

    我正在开发 Cocoa Objective C 实用程序应用程序 并且想要处理多个 瞬时 文件打开 为了处理文件打开部分 我在我的AppDelegate mm file BOOL application NSApplication app