Почему метод NSApplicationDelegate openFiles: вызывается несколько раз при многократном перетаскивании на значок дока?
У меня есть приложение Mac OS X, которое реализует -(void) приложение openFiles: метод, чтобы реагировать на перетаскиваемые файлы на значке приложения. У меня есть список разрешенных типов файлов в разделе типов документов в моих настройках целевой информации, и Finder действительно разрешает перетаскивание, но когда pdf находится в списке перетаскиваемых элементов, мой метод делегата вызывается дважды: один для всех элементов без PDF, и один только для PDF. Это, конечно, лишает меня возможности справиться с ситуацией должным образом. Кто-нибудь может мне помочь или объяснить, что происходит? Спасибо
1 ответ
Я видел такое поведение в одном из моих приложений (обычно при перетаскивании целой пачки файлов одновременно). Как я обойти, вместо того, чтобы открывать файлы непосредственно из 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];
}