Question

Je l'invocation d'une NSOpenPanel d'un fil créé par C ++ boost.

le panneau comporte de façon erratique et ne répond pas bien à la souris, qui cliquant sur les objets ne fait rien quelque temps en cliquant sur zone de liste déroulante de haut niveau n'améliore la réponse.

dois-je ai d'exécuter un runloop séparé que je fais un runModalForDirectory qui devrait prendre soin de diriger sa propre boucle.

J'ai aussi créé une classe objc séparée qui fait performSelectorOnMainThread pour afficher le panneau en fil principal mais le comportement est le même.

[ps performSelectorOnMainThread:@selector(showOpenPanel) withObject:nil 
                      waitUntilDone:YES
                      modes:[NSArray arrayWithObject:NSRunLoopCommonModes]];

J'ai aussi essayé avec waitUntilDone. NO et l'exécution d'un CFRunLoopRunInMode qui ne contribue pas non plus

- (bool) showOpenPanel
{
    NSOpenPanel *op = [NSOpenPanel openPanel];
    [op setAllowsMultipleSelection:YES];
    [op setTitle:@"Choose File"];
    [op setMessage:@"Choose file for Importing."];
    [op setFloatingPanel:true]; 
    bool result =[op runModalForDirectory:NSHomeDirectory() file:nil types:self.fileTypes];
    if (result == NSOKButton) {
        [self setSelectedFiles:[op filenames]];
        [self setLastShowResult:true];
    }
    else {
        [self setLastShowResult:false];
    }

    [self setPanelIsDone:true]; 
    return self.lastShowResult;
}
Était-ce utile?

La solution

NSOpenPanel fait partie de AppKit. AppKit fonctions et les classes ne peuvent être utilisés en toute sécurité sur le thread principal.

Montrez-nous le code utilisé avec performSelectorOnMainThread afin que nous puissions aider à comprendre pourquoi vous pourriez encore être des problèmes pour voir. Je soupçonne que vous appelez des méthodes individuelles avec elle - ne pas; il ne fonctionnera pas la façon dont vous attendez. Appel au thread principal pour la totalité de votre interaction avec NSOpenPanel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top