Удаление и повторная вставка UIView в UIViewController - PullRequest
0 голосов
/ 25 февраля 2010

У меня есть UIViewController, который содержит UIView. Между каждым разом, когда выводится viewcontroller, необходимо очистить UIView и перезагрузить контент. Проблема в том, что старый контент все еще отображается в UIView.

Загрузка данных до того, как контроллер станет видимым:

- (void)viewWillAppear:(BOOL)animated
{
    contentView = [[ContentView alloc] initWithFrame:CGRectMake(10, 10, 100, 100)];
    contentView.userInteractionEnabled = NO;
    [self.view addSubview:contentView];

    if([self loadContentData] == NO) {
        [contentView release];
        return NO;
    }
    return YES;
}

Удалить содержимое после скрытия контроллера:

- (void)viewDidDisappear:(BOOL)animated
{
    [contentView removeFromSuperview];
    [contentView release];
}

Почему этой очистки недостаточно?

1 Ответ

0 голосов
/ 26 февраля 2010

Попробуйте:

- (void)viewDidDisappear:(BOOL)animated
{
    [super viewDidDisappear:animated];
    [contentView removeFromSuperView];  //releases contentView
}

Вы должны вызывать метод super при переопределении этого метода.

Кроме того, ContentView, похоже, переиздан в опубликованном вами коде, что заставляет меня верить, что вы сохраняете его где-то в своем реальном коде. В этом случае у вас может быть чрезмерно сохраненный контент-представление, которое не позволит его освободить и очистить от иерархии вашего представления.

Я бы предложил вам изучить что-то вроде этого:

- (void)viewWillAppear:(BOOL)animated
{
    contentView = [[[ContentView alloc] initWithFrame:CGRectMake(10, 10, 100, 100)] autorelease];
    contentView.userInteractionEnabled = NO;
    [self.view addSubview:contentView];

    if([self loadContentData] == NO) {
        //[contentView release];  //ContentView is now autoreleased and will be dropped when the method exits.
        return NO; //this probably has a compiler warning, since it is a (void) method
    }
    return YES; //this probably has a compiler warning, since it is a (void) method
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...