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

Это мой код с двумя IBAction для открытия и закрытия подпредставления в двух разных классах

- (IBAction) showListClient:(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];
}

теперь все в порядке в первый раз, ноесли я хочу использовать больше времени в своем списке, я должен написать в closeListClient

list = nil;
[list release];

, теперь моя проблема в том, что этот "список" объявлен только в классе ListClient как

ListClient *list;

и когда язапись списка в CloseListClient - ошибка ... что я могу сделать?

Ответы [ 2 ]

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

В ListCLient.h определите протокол для его делегата:

@protocol ListClientDelegate<NSObject>
@optional
- (void)listClientDidClose:(ListClient *)listClient;
@end

и измените определение свойства для delegate:

@property (nonatomic, assign) id<ListClientDelegate> delegate;

Затем отправьте сообщение делегату, когдавызывается действие closeListClient (в ListClient.m):

-(IBAction)closeListClient {
    [self.view removeFromSuperview];
    [self.delegate listClientDidClose:self]
}

Затем, наконец, в SomeController.m реализуйте метод делегата:

-(void)listClientDidClose:(ListClient *)listClient {
    [list release];
    list = nil;
}

Я надеюсь, что это решит вашу проблему.

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

Я хотел бы указать на несколько проблем, которые могут решить вашу проблему.Я немного запутался в вашем вопросе, особенно в формулировке «Открытие и закрытие представления».Я уверен, что вы просто хотите скрыть и показать вид, основанный на том, какая кнопка нажата.

Этот код неверен

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

//I am sure you want to remove the list view
-(IBAction)closeListClient {
   [list.view removeFromSuperview];
}

И операции сброса и nil здесь обратные

list = nil;
[list release];

//Change to
[list release];
list = nil;

В итоге вы должны получить

-(IBAction)closeListClient {
    [list.view removeFromSuperview];
    [list release];
    list = nil;
}
...