3 votes

NSOpenPanel runModal se bloque ?

J'ai une routine basée sur un code trouvé sur ce forum :

+ (FSRef)useOpenFileToGetFSRef:(NSString **)fileName requiredFileType: (NSString*) requiredFileType
{
     FSRef fileFSRef;
    NSArray* fileTypes = [[NSArray alloc] initWithObjects:requiredFileType, nil];

    //http://stackoverflow.com/questions/11815784/objective-c-nsopenpanel-get-filename
    NSOpenPanel* openDlg = [NSOpenPanel openPanel];
    [openDlg setFloatingPanel:YES];
    [openDlg setCanChooseDirectories:NO];
    [openDlg setCanChooseFiles:YES];
    [openDlg setAllowsMultipleSelection:YES];
    [openDlg setAllowedFileTypes:fileTypes];

    if ( [openDlg runModal] == NSOKButton )  //<== CRASHES ON CALL TO runModal
    {
        NSArray* filePaths = [openDlg URLs];
        //only getting 1st file
        NSURL *fileUrl = [filePaths objectAtIndex:0];

        *fileName = [fileUrl path];
        CFURLGetFSRef((CFURLRef)fileUrl, &fileFSRef);
    }

    return fileFSRef;
}

L'application se bloque de manière répétée lors de l'appel à runModel :

NSOpenPanel runModal anomaly

Comment expliquer cela ?

Merci d'avance à tous ceux qui voudront bien me donner des informations.

Informations sur le système : OS X 10.8.4. Compilé avec ARC.

7voto

Mobile Ben Points 5078

Je pense en fait que vous aviez un point d'arrêt pour toutes les exceptions. Je viens de rencontrer cela et j'ai cherché à savoir pourquoi. Je suis tombé sur ce post, mais j'ai ensuite trouvé ce qui suit.

NSOpenPanel plante lors du débogage avec Xcode 4.5.1

Lorsque vous avez recréé le projet, les points d'arrêt ont été réinitialisés.

0voto

VikR Points 1097

Il semble qu'il y ait eu une anomalie dans le fichier du projet. J'ai copié tous les fichiers sources et les fichiers xib dans un nouveau projet, et après cela, NSOpenPanel runModal a fonctionné comme prévu.

0voto

Nathan Dunn Points 17

J'ai eu un problème similaire. Je n'avais pas stocké tous les fichiers du projet (le même code fonctionnait parfaitement sur une autre machine). Je les ai supprimés un par un, sans effet. Supprimé DerivedData et n'a aucun effet.

lappy:vStacks ndunn$ hg st . ? StacksGui3.xcodeproj/projet.xcworkspace/xcuserdata/ndunn.xcuserdatad/UserInterfaceState.xcuserstate ? StacksGui3.xcodeproj/xcuserdata/ndunn.xcuserdatad/xcschemes/StacksGui3.xcscheme ? vStacks.xcodeproj/projet.xcworkspace/xcuserdata/ndunn.xcuserdatad/UserInterfaceState.xcuserstate ? vStacks.xcodeproj/xcuserdata/ndunn.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist ? vStacks.xcodeproj/xcuserdata/ndunn.xcuserdatad/xcschemes/vStacks.xcscheme ? vStacks.xcodeproj/xcuserdata/ndunn.xcuserdatad/xcschemes/xcschememanagement.plist

J'étais sur le point de faire ce que vous avez fait, mais j'ai fini par le faire :
1 - suppression de mon vStacks.xcodeproj et de la source
2 - création d'un autre fichier portant le même nom
3 - a supprimé la nouvelle
4 - récupérer l'ensemble du projet à partir du contrôle des sources.

Remarque : Il n'est pas certain que les étapes 2 et 3 soient nécessaires, mais les étapes 1 et 4 le sont certainement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X