Я разрабатываю приложение iphone, и у меня есть небольшая проблема. Я использую методы всплывающей абоненте в мой файл appdelegate.m ржал как тоМетод dealloc вызывает три раза, во время выполнения
-(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];
}
И я звоню эти методы внутри представления, как этот
StatusFoxAppDelegate *delegate = (StatusFoxAppDelegate*)[[UIApplication sharedApplication] delegate];
[delegate OpenInfo];
И эти взгляды хелперов и нож просмотра через NSNotificationCenter.
Моя проблема заключается в том, что вы можете видеть, что методы «OpenInfo» и «OpenNetworkSelection» содержат логику создания экземпляра экземпляра.
Когда я вызвал метод OpenInfo, он работает идеально, как должно быть. Но «OpenNetworkSelection» не работает, он бросает, когда я пытался второй раз *** - [UIButton release]: сообщение отправлено на освобожденный экземпляр ошибки 0x3dbdb50.
Хорошо, я понял это. Затем я помещаю строку NSlog в перегрузку Dealloc NetworkSelection.m
и файлы OpenInfo.m, потому что мне нужно различие в поведении.
Таким образом, методы openall openInfo работают, когда вид закрыт (я имею в виду удаленный из супервизора). Но метод dealloc NetworkSelection выполняется три раза. Я не нашел источник проблем.
Может кто-нибудь сказать мне, что я делаю неправильно?
Спасибо
Edit:
Ребята, я нашел что-то неправильно в мой взгляд NetworkSelection контроллер. Больше описания; Я видел эти строки кода в моем контроллере view.
CommonGateway *gw = [[CommonGateway alloc] InitWithDefaults];
self.gateway = gw;
[self.gateway GetAvailableNetworkList];
[self.gateway setCommDelegate:self];
[gw release];
В этих строках кода я делаю звонки асинхронного сервера, когда я закомментировать эти строки, мой ViewController работал отлично, тогда я создал метод «LoadDataFromServer» и я прошел экземпляр CommonGateway из источника, который appdelage так
- (void)LoadDataFromServer{
CommonGateway *gw = [[CommonGateway alloc] InitWithDefaults];
self.gateway = gw;
[self.gateway GetAvailableNetworkList];
[self.gateway setCommDelegate:self];
[gw release];
}
Мое изменение appendlegate;
-(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];
}
Но результат такой же, если я закомментировать "[self.networkselection LoadDataFromServer];" тогда он работает. И мой класс CommonGateway уведомляет вызывающего абонента через NSNotificationCenter.
Я думаю, что это даст больше информации для решения проблемы.
Еще раз спасибо
Предполагая, что networkselection и infoDetail определены с помощью @property (сохранить), код, который вы установили, выглядит отлично. Нам нужна дополнительная информация о различиях в двух контроллерах. – deanWombourne
Почему я использую эти вызовы методов для appdelegate? потому что мне нужно открыть мои взгляды на все приложение. – fyasar
Нет, вызов этих методов из делегата приложения должен быть прекрасным - я делаю это все время, и это правильная вещь. Где-то должно быть различие в количестве раз, когда вы вызываете выпуск на объекте - поместите точку останова на метод dealloc и посмотрите на трассировки стека, которые вы получаете, это должно дать вам ключ, где искать? – deanWombourne