Publicité
+ 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
    436
    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 : 436
    Points : 215
    Points
    215

    Par défaut Delegate devient null

    Bonjour,
    dans une classe j'ai un delegate definis comme ceci :

    Code :
    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 :
    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
    389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Expert iOS

    Informations forums :
    Inscription : juin 2005
    Messages : 389
    Points : 1 390
    Points
    1 390

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 2 390
    Points : 3 141
    Points
    3 141

    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
    436
    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 : 436
    Points : 215
    Points
    215

    Par défaut

    @chiv :

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

    Informations forums :
    Inscription : septembre 2006
    Messages : 2 390
    Points : 3 141
    Points
    3 141

    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
    436
    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 : 436
    Points : 215
    Points
    215

    Par défaut

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •