[Résolu]Erreur étrange à  l'utilisation d'un iVar créée dans awakeFromNib

GreensourceGreensource Membre
juillet 2009 modifié dans API UIKit #1
Je suis face à  un problème qui me dépasse!
Contexte: J'ai une tableView et son controller qui s'avère être aussi le delegate et le dataSource.
Dans ce controller je déclare une iVar de type NSDictionnary pour remplir la tableView.
Dans awakeFromNib du controller j'initialise le dico, j'ai vérifié c'est ok (dans debugger, j'ai bien marqué 2 key/value).

Ensuite le datasource doit faire son taf, donc appel de
<br />- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView

Moi j'y ai juste mis [leDico count]
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {<br />&nbsp; &nbsp; return [preference count];<br />}


Et là  BAM, plantage! Alors j'ai débuggué, et c'est là  le truc bizarre, le dico à  bien la même adresse qu'à  la fin de la méthode awakeFromNib, mais c'estp lus marqué le 2 key/value, comme ça l'était. Ce qui m'indique habituellement que le dico n'est pas créer.
Comment c'est possible? Il a pas pu disparaà®tre entre awakeFromNib et numberOfSectionsInTableView:?

Si ça peut aider, j'ai remarqué que la variable isa du dico à  changer par contre.

Réponses

  • yoannyoann Membre
    11:51 modifié #2
    Comment est créé ton dico ? Avec quels méthodes ?
  • GreensourceGreensource Membre
    11:51 modifié #3
    Avec la méthode conseillé par Apple dans leur doc:
    NSString * plistPath = [[NSBundle mainBundle] pathForResource:@&quot;Preference&quot; ofType:@&quot;plist&quot;];<br />NSString *errorDesc = nil;<br />NSPropertyListFormat format;<br />NSData *plistXML = [[NSFileManager defaultManager] contentsAtPath:plistPath];<br />preference = (NSDictionary*)[NSPropertyListSerialization<br />						propertyListFromData:plistXML<br />						mutabilityOption:NSPropertyListMutableContainersAndLeaves<br />						format:&amp;format errorDescription:&amp;errorDesc];<br />	<br />if (!preference) {<br />	NSLog(errorDesc);<br />	[errorDesc release];<br />}
    
  • yoannyoann Membre
    11:51 modifié #4
    Il manque le retain sur ton objet preference.

    De manière général, tout nouvel objet renvoyé par une méthode de classe ne commençant pas par new ou alloc (donc typiquement dataFromPropertyList:format:errorDescription:) renvois un objet dans le bassin d'autorelease. Donc quand tu va le tester juste après il va marcher, plus tard non.
  • GreensourceGreensource Membre
    11:51 modifié #5
    En effet c'est bien ça! Et puis c'est logique en plus. Pourquoi ça ne fait pas tilt quand il faut  ::)

    Grâce à  toi j'ai vérifié à  un autre endroit où j'avais fait l'erreur, mais ça ne plantais pas...encore ^^

    Merci bien.
Connectez-vous ou Inscrivez-vous pour répondre.