7

我有一个 Mac OS X 应用程序,它实现了-(void)application openFiles:对应用程序图标上拖动的文件做出反应的方法。

我的目标信息设置的文档类型部分中有一个允许的文件类型列表,并且 Finder 确实允许拖动,但是当 PDF 在拖动的项目列表中时,我的委托方法被调用两次:一次用于所有没有PDF,一个仅用于 PDF。

这当然使我无法妥善处理这种情况。

任何人都可以帮助我或解释发生了什么吗?谢谢

4

1 回答 1

10

我在我的一个应用程序中看到了这种行为(通常是一次拖动一大堆文件时)。当我解决方法时,我不是直接从 中打开文件,而是将application:openFiles:它们排队并在一小段延迟后打开排队的文件。类似于以下内容:

- (void) application:(NSApplication*)sender openFiles:(NSArray*)filenames
{
    // I saw cases in which dragging a bunch of files onto the app
    // actually called application:openFiles several times, resulting
    // in more than one window, with the dragged files split amongst them.
    // This is lame.  So we queue them up and open them all at once later.
    [self queueFilesForOpening:filenames];

    [NSApp replyToOpenOrPrint:NSApplicationDelegateReplySuccess];
}


- (void) queueFilesForOpening:(NSArray*)filenames
{
    [self.filesToOpen addObjectsFromArray:filenames];
    [self performSelector:@selector(openQueuedFiles) withObject:nil afterDelay:0.25];
}


- (void) openQueuedFiles
{
    if( self.filesToOpen.count == 0 ) return;

    [self makeNewWindowWithFiles:self.filesToOpen];

    [self.filesToOpen removeAllObjects];
}
于 2016-06-04T01:18:14.323 回答