Цель C: проблема с открытым во второй раз подпредставлением - PullRequest
0 голосов
/ 05 апреля 2011

У меня есть этот код, чтобы открыть подпредставление

- (IBAction) showList:(id) sender {

if( list == nil){

    list = [[ListClient alloc] initWithNibName:@"ListClient" bundle:nil];
    [list setDelegate:self];
    [self.view addSubview:list.view];
}
}

, и этот код, чтобы закрыть это подпредставление

-(IBAction) closeListClient {
[self.view removeFromSuperview];

}

Впервые это нормальноно во второй раз, когда я хочу открыть подпредставление, оно не работает, почему?

Ответы [ 3 ]

0 голосов
/ 05 апреля 2011

Это из-за оператора if.Измените его на:

if ( list == nil ) {
    list = [[ListClient alloc] initWithNibName:@"ListClient" bundle:nil];
    [list setDelegate:self];
}
[self.view addSubview:list.view];

И это будет работать.

PS. Чтобы исправить это управление памятью, добавьте сохраненное свойство list в класстак что вы можете сказать

self.list = [[[ListClient alloc] initWithNibName:@"ListClient" bundle:nil] autorelease];

И вы можете сказать self.list = nil;, чтобы освободить объект, когда вы закончите с ним.(например, при увольнении или по вашему dealloc методу)

0 голосов
/ 05 апреля 2011

Потому что ваш list не nil, поэтому он не входит внутрь if (list == nil).

Измените его на if (list.superview == nil).

0 голосов
/ 05 апреля 2011
-(IBAction) closeListClient{
[self.view removeFromSuperview];
if ( list != nil ) {
    [list release];
    list=nil;
}}
...