+ Répondre à la discussion
Affichage des résultats 1 à 6 sur 6

Discussion: Delegate devient null

  1. #1
    Membre confirmé Avatar de Fooshi
    Homme Profil pro
    Inscrit en
    juin 2002
    Messages
    455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : juin 2002
    Messages : 455
    Points : 230
    Points
    230

    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/Modérateur

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

    Informations professionnelles :
    Activité : Expert iOS

    Informations forums :
    Inscription : juin 2005
    Messages : 394
    Points : 1 404
    Points
    1 404

    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 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : septembre 2006
    Messages : 2 398
    Points : 3 152
    Points
    3 152

    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 confirmé Avatar de Fooshi
    Homme Profil pro
    Inscrit en
    juin 2002
    Messages
    455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : juin 2002
    Messages : 455
    Points : 230
    Points
    230

    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 398
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : septembre 2006
    Messages : 2 398
    Points : 3 152
    Points
    3 152

    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 confirmé Avatar de Fooshi
    Homme Profil pro
    Inscrit en
    juin 2002
    Messages
    455
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : juin 2002
    Messages : 455
    Points : 230
    Points
    230

    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;
    }