Je développe une application iphone et j'ai un petit problème dessus. Je suis en utilisant des méthodes de l'appelant pop-up dans mon fichier appdelegate.m beugler comme çaLa méthode dealloc appelle trois fois, pendant l'exécution
-(void)OpenInfo{
InfoDetail *detail = [[InfoDetail alloc] initWithNibName:@"InfoDetail" bundle:nil];
self.infoDetail = detail;
[detail release];
[window addSubview:detail.view];
}
-(void)OpenNetworkSelection{
NetworkSelection *netsel = [[NetworkSelection alloc] initWithNibName:@"NetworkSelection" bundle:nil] ;
self.networkselection = netsel;
[netsel release];
[window addSubview:netsel.view];
}
Et j'appelle ces méthodes à l'intérieur de vues comme celle
StatusFoxAppDelegate *delegate = (StatusFoxAppDelegate*)[[UIApplication sharedApplication] delegate];
[delegate OpenInfo];
Et ces vues d'aide et ouvre vues communiquant via NSNotificationCenter. Mon problème est comme vous pouvez le voir "OpenInfo" et "OpenNetworkSelection" méthodes contient des logiques de création d'instance de vue. Lorsque j'ai appelé la méthode OpenInfo, cela fonctionne parfaitement comme il se doit. Mais "OpenNetworkSelection" ne fonctionne pas il lance quand j'ai essayé la deuxième fois *** - [UIButton release]: message envoyé à l'erreur désaffectée instance 0x3dbdb50.
Ok, je l'ai compris. Ensuite, je mets NSlog ligne dans la surcharge Dealloc de NetworkSelection.m
et OpenInfo.m fichiers, car j'ai besoin de différences de comportements. Par conséquent, les méthodes OpenInfo dealloc fonctionnent lorsque la vue est fermée (je veux dire supprimé de superview). Mais la méthode dealloc de NetworkSelection s'exécute trois fois. Je n'ai pas trouvé de source de problème. Est-ce que quelqu'un peut me dire ce que je fais mal?
Merci
Edit:
Les gars, je l'ai trouvé quelque chose de mal dans mon contrôleur de vue NetworkSelection. Plus de description est; J'ai vu ces lignes de code dans mon viewcontroller.
CommonGateway *gw = [[CommonGateway alloc] InitWithDefaults];
self.gateway = gw;
[self.gateway GetAvailableNetworkList];
[self.gateway setCommDelegate:self];
[gw release];
Dans ces lignes de code que je fais des appels de serveur async, quand je commentais ces lignes, mon viewcontroller a parfaitement fonctionné, alors j'ai créé méthode « LoadDataFromServer » et je suis passé par exemple CommonGateway de source qui appdelage comme ça
- (void)LoadDataFromServer{
CommonGateway *gw = [[CommonGateway alloc] InitWithDefaults];
self.gateway = gw;
[self.gateway GetAvailableNetworkList];
[self.gateway setCommDelegate:self];
[gw release];
}
Mon code d'appdelegate est remplacé par;
-(void)OpenNetworkSelection{
NetworkSelection *netsel = [[NetworkSelection alloc] initWithNibName:@"NetworkSelection" bundle:nil] ;
self.networkselection = netsel;
self.networkselection.gateway = commonGateway;
[netsel release];
[window addSubview:self.networkselection.view];
[self.networkselection LoadDataFromServer];
}
Mais même résultat, si je en commentaire "[self.networkselection LoadDataFromServer];" ligne alors ça marche. Et ma classe CommonGateway notifier à l'appelant via NSNotificationCenter.
Je pense que cela donnera plus d'indices pour résoudre le problème.
Merci encore
En supposant que networkselection et infoDetail sont définis avec @property (retenez) le code que vous avez affiché semble correct. Nous avons besoin de plus d'informations sur les différences dans les deux contrôleurs pour aider. – deanWombourne
Pourquoi j'utilise ces appels de méthode sur l'appdelegate? parce que j'ai besoin d'ouvrir mes vues sur l'ensemble de l'application. – fyasar
Non, l'appel de ces méthodes à partir du délégué de l'application devrait être bon - je le fais tout le temps et c'est la bonne chose à faire. Quelque part il doit y avoir une différence dans le nombre de fois que vous appelez release sur l'objet - mettre un point d'arrêt sur la méthode dealloc et regarder les traces de la pile que vous obtenez, cela devrait vous donner une idée de l'endroit où chercher? – deanWombourne