IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XCode Discussion :

pb avec NSWindow windowForSheet [Objective-C]


Sujet :

XCode

  1. #1
    Membre du Club

    Profil pro
    DEVELOPPEUR
    Inscrit en
    Novembre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DEVELOPPEUR

    Informations forums :
    Inscription : Novembre 2009
    Messages : 17
    Points : 44
    Points
    44
    Par défaut pb avec NSWindow windowForSheet
    Bonjour à toutes et à tous,

    un autre problème à résoudre.

    dans le cadre de la gestion des erreurs lors du parsing d'un fichier XML, on est amené à utiliser la méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError
    En général, on fait afficher une alerte afin d'avertir l'utilisateur qu'il y a une erreur de parsing.

    voici le code qui est recommandé par apple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
        NSWindow *modWin = [self windowForSheet];
        
        if (!modWin) modWin = [NSApp mainWindow];
        NSAlert *parserAlert = [[NSAlert alloc] init];
        
        [parserAlert setMessageText:@"Parsing Error!"];
        
        [parserAlert setInformativeText:[NSString stringWithFormat:@"Error %i,
                                         Description: %@, Line: %i, Column: %i", [parseError code],
                                         [[parser parserError] localizedDescription], [parser lineNumber],
                                         [parser columnNumber]]];
        
        [parserAlert addButtonWithTitle:@"OK"];
        
        [parserAlert beginSheetModalForWindow:modWin modalDelegate:self
                               didEndSelector:@selector(alertDidEnd:returnCode:contextInfo:)
                                  contextInfo:nil];
        [parserAlert release];
    }
    je bosse sur un Framework (+ target tests).

    j'ai un message d'erreur qui me stipule que "la méthode windowForSheet" est introuvable ! alors que j'ai fait (je pense ?) les bons imports.

    ai-je oublié un import ?

    avez - vous svp une idée?

    merci par avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    windowForSheet est une méthode de NSDocument ce qui sous-entend que "self" est une instance de NSDocument ou d'une sous-classe, donc il est probable que vous ayez oublié de changer le NSObject en un NSDocument dans la déclaration de la classe en question dans le .h :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    @interface MyXMLDocument : NSDocument
    {
    …
    et si votre classe n'est pas prévue pour être une sous-classe de NSDocument, il faut résoudre le problème autrement : en utilisant modalWindow de NSResponder par exemple… ou en comprenant ce que l'exemple fait (ce code ne sert qu'à afficher l'alerte dans une sheet attachée à la fenêtre qui est déjà modale s'il y en a une…)
    et en transposant à votre situation…

  3. #3
    Membre du Club

    Profil pro
    DEVELOPPEUR
    Inscrit en
    Novembre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DEVELOPPEUR

    Informations forums :
    Inscription : Novembre 2009
    Messages : 17
    Points : 44
    Points
    44
    Par défaut
    Merci pour les infos.

    je bosse sur une classe qui n'est pas une classe de type NSDocument ou autre classe de type "graphique".

    c'est une classe qui a pour rôle de parser un fichier XML.
    voici sa définition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @interface RegisterEntityManager : NSObject <NSXMLParserDelegate> {
    dans le cas d'une erreur de parse dans le fichier XML, la classe va appeler la méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    - (void)parser:(NSXMLParser *)parser parseErrorOccurred:(NSError *)parseError {
    en fait je souhaite juste afficher dans cette méthode, une alerte en disant "gros problème avec fichier XML", logger un message et puis quitter l'application.

    pouvez - vous svp la démarche à suivre en ce qui concerne l'affichage et la gestion de cette alerte.

    merci par avance.

    Cette classe est embarquée dans un framework, si le fichier XML est corrompu, il faut arrêter l'application.

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 936
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 936
    Points : 4 356
    Points
    4 356
    Par défaut
    En général, ce n'est pas une bonne pratique que ce soit le code contenu dans un framework de ce type qui affiche des éléments d'interface utilisateur : il est plus consistent de laisser l'application de ce qui doit être affiché ou non, quand et comment… Le framework n'a aucune raison de présumer de qui l'appelle et dans quel contexte : modal, modeless, CLI, …

    faites remonter l'erreur via les méthodes du framework (via un NSError par exemple…) et dans l'application faites ce que vous voulez question interface utilisateur : que ce soit un NSRunAlertPanel, une sheet attachée à un fenêtre, un message dans un NSTextField, une ligne dans un NSText qui simule une console,…

  5. #5
    Membre du Club

    Profil pro
    DEVELOPPEUR
    Inscrit en
    Novembre 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : DEVELOPPEUR

    Informations forums :
    Inscription : Novembre 2009
    Messages : 17
    Points : 44
    Points
    44
    Par défaut
    Merci pour les infos.

    en effet je suis tout à fait d'accord sur le principe.

    il faut découpler framework et IHM, principe des couches logicielles.

    c'était juste pour tester une alerte dans un contexte particulier.

    mais finalement, je vais rester sur votre idée (qui d'ailleurs est implémentée), les tests IHM seront faits ultérieurement.

    Merci encore pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. requete avec OBCD et visual c++
    Par Anonymous dans le forum MFC
    Réponses: 12
    Dernier message: 18/11/2004, 16h15
  2. [langage] Comparer Perl avec d'autres langages comme C ?
    Par Anonymous dans le forum Langage
    Réponses: 3
    Dernier message: 10/08/2002, 23h52
  3. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10
  4. [Kylix] Runtime error 230 avec INDY
    Par Anonymous dans le forum EDI
    Réponses: 2
    Dernier message: 23/03/2002, 11h51
  5. Réponses: 2
    Dernier message: 20/03/2002, 23h01

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo