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

Objective-C Discussion :

Delegate devient null


Sujet :

Objective-C

  1. #1
    Membre averti Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ICD
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 507
    Points : 359
    Points
    359
    Par défaut Delegate devient null
    Bonjour,
    dans une classe j'ai un delegate definis comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    @interface CriteriaViewController : UIViewController <UIScrollViewDelegate, UISearchBarDelegate, UIPopoverControllerDelegate, AssetServiceDelegate, UITableViewDataSource, UITableViewDelegate> {
    ...
     id<CriteriaChangeDelegate> delegateCriteriaChange;
    ...
    }
     
    -(id)initWithDelegate:(id<CriteriaChangeDelegate>) delegate andFrame:(CGRect) frame;
    A cet instant dans la fonction,

    -(id) initWithDelegateid<CriteriaChangeDelegate>) delegate andFrameCGRect)frame{
    ...
    delegateCriteriaChange = delegate;
    ...
    }

    delegateCriteriaChange n'est pas nul , mais plus bas dans la fonction viewDidLoad, delegateCriteriaChange devient NULL :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    -(void) viewDidLoad{
        [super  viewDidLoad];
        NSArray * array = [[NSArray alloc] initWithObjects:@"Critères", @"Établissements", @"Type", @"Prix", @"Critères spéciaux",  nil];
        self.category   = array;
        [array  release];    
     
     
     
        NSLog(@"DELEG1 %@", delegateCriteriaChange);
    }
    je ne comprend pas pourquoi

  2. #2
    Rédacteur

    Homme Profil pro
    Expert iOS
    Inscrit en
    Juin 2005
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Expert iOS

    Informations forums :
    Inscription : Juin 2005
    Messages : 413
    Points : 1 619
    Points
    1 619
    Billets dans le blog
    1
    Par défaut
    Comment crée-tu l'objet delegate que tu passes en paramètre de ta méthode initWithDelegate ?

    Il est peut-être autorelease ou appartient à un objet que tu détruis par la suite. Son retainCount doit rester > 0 mais il ne doit pas être retain par l'objet dont il est le délégué.

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 933
    Points : 4 346
    Points
    4 346
    Par défaut
    Plus que probablement 2 instances de CriteriaViewController sont créées :
    faites un NSLog de self dans initWithDelegate et viewDidLoad pour vous en convaincre.

  4. #4
    Membre averti Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ICD
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 507
    Points : 359
    Points
    359
    Par défaut
    @chiv :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    underC      = [[CriteriaViewController alloc]  initWithDelegate:self andFrame:CGRectMake(15, 0, self.view.frame.size.width, self.view.frame.size.height)];
    Ma classe est initialisée comme ceci avec self en fait de la classe "splitViewController". Je n'ai pas compris cette histoire de retain désolé.

    @ JeitEmgie :
    les 2 traces dans chacune des fonctions donnent les même logs.

    J'ai initialisé mon deuxième contrôleur dans viewWillAppear et non dans viewDidLoad pour avoir le delegué mais cela ne resoud pas mon probleme :

    la table view de mon second controlleur n'est toujours pas affiché , la fonction cellForRowAtIndexPath ou numberOfRowsInSection n'est pas appelé.

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 933
    Points : 4 346
    Points
    4 346
    Par défaut
    Citation Envoyé par Fooshi Voir le message
    @ JeitEmgie :
    les 2 traces dans chacune des fonctions donnent les même logs.
    montrez le code du NSLog que vous avez ajouté... histoire de vérifer que vous testiez bien ce que vous devez.

  6. #6
    Membre averti Avatar de Fooshi
    Homme Profil pro
    ICD
    Inscrit en
    Juin 2002
    Messages
    507
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : ICD
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 507
    Points : 359
    Points
    359
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    -(void) viewDidLoad{
        [super  viewDidLoad];
        NSArray * array = [[NSArray alloc] initWithObjects:@"Critères", @"Établissements", @"Type", @"Prix", @"Critères spéciaux",  nil];
        self.category   = array;
        [array  release];
     
        NSLog(@"SELF2 %@", self);
     
    }
    et

    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
    -(id) initWithDelegate:(id<CriteriaChangeDelegate>) delegate andFrame:(CGRect)frame{
        if ((self = [super init])){
            nonSelectedBtnColor = [UIColor whiteColor];
            selectedBtnColor = [SettingsService mainColor];
            self.view.frame = frame;
            firstAppearance = YES;
            garagePOIEnable = NO;
            displayPOI = YES;
            editable = YES;
     
            delegateCriteriaChange = delegate;
     
          ...
            NSLog(@"SELF1 %@", self);
        }
        return self;
    }

Discussions similaires

  1. Réponses: 15
    Dernier message: 16/01/2009, 10h50
  2. ThreadLocal devient null dans mon application Web
    Par enjoy dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 12/02/2008, 17h32
  3. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    Réponses: 5
    Dernier message: 04/06/2004, 14h26
  4. [VB6] [BDD] Recordset et champ égal à Null
    Par Gr|ppen dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 07/03/2003, 11h00
  5. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    Réponses: 2
    Dernier message: 28/12/2002, 01h07

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