Я разрабатываю приложение для iphone, и у меня небольшая проблема.
Я использую методы вызова всплывающих окон в моем файле appdelegate.m ниже, как это
-(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 error.
Хорошо, я понял это. Затем я помещаю строку NSlog в перегрузку Dealloc NetworkSelection.m
и файлы OpenInfo.m, потому что мне нужны различия в поведении.
Итак, методы OpenInfo dealloc работают, когда представление закрывается (я имею в виду удаление из суперпредставления). Но метод dealloc NetworkSelection выполняется три раза. Я не нашел источника проблемы.
Может кто-нибудь сказать мне, что я делаю не так?
Спасибо
Редактировать:
Ребята, я обнаружил, что что-то не так в моем контроллере просмотра NetworkSelection. Больше описания есть; я видел эти строки кода в моем viewcontroller.
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];
}
Код моего приложения изменен на;
-(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.
Я думаю, это даст больше подсказок для решения проблемы.
Еще раз спасибо