Не можете удалить подпредставление?

Это о веб-браузере.

У меня есть собственный класс, который обрабатывает веб-страницы.

SNBrowserView
SNBrowserViewPage

У SNBrowserViewPages есть два объекта.

WKWebView
UIImageView // Snapshot of the WKWebView

Функция поддерживает или восстанавливает страницу для управления памятью.

(Тестирование) Каждый раз, когда выбрана страница, я вызываю функцию восстановления.

Выбор:

- (void)browserView:(SNBrowserView *)browserView didSelectPage:(SNBrowserViewPage *)page
{
        if (page.sustained) {

            [page recoverAnimated:NO];
        }
}

Sustain:

- (void)sustain
{
    _sustained = YES;

    if (_webView) {

        _webView = nil;

        [_webView removeFromSuperview];
    }

    _snapshotView = [[UIImageView alloc] init];

    _snapshotView.frame = CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height);

    _snapshotView.image = _snapshot;

    [self addSubview:_snapshotView];
}

Восстановление:

- (void)recoverAnimated:(BOOL)animated
{
    _sustained = NO;

    _webView = [[WKWebView alloc] init];

    _webView.frame = CGRectMake(0.0, 0.0, self.frame.size.width, self.frame.size.height);

    _webView.navigationDelegate = self;

    _webView.UIDelegate = self;

    [self addSubview:_webView];

    [self sendSubviewToBack:_webView];

    [self loadURL:_initialURL]; // Start loading as early as possible.

    if (animated) {

        [UIView animateWithDuration:0.3
                         animations:^{

                             _snapshotView.alpha = 0.0;
                         }
                         completion:^(BOOL finished){

                             _snapshotView = nil;

                             [_snapshotView removeFromSuperview];
                         }];
    }
    else {

        _snapshotView = nil;

        [_snapshotView removeFromSuperview];
    }
}

Когда я пытаюсь восстановить страницу, снимок экрана не устанавливается на ноль и не удаляется из суперпредставления.

Как это вообще возможно?

Даже это не сработает

- (void)recoverAnimated:(BOOL)animated
{
    _snapshotView = nil;

    [_snapshotView removeFromSuperview];
}

SnapshotView - это подпредставление, removeFromSuperview всегда должно работать, почему его БОЛЬШЕ?

1 ответ

Решение

Я предлагаю вам попробовать заменить все ваши

_view = nil;

[_view removeFromSuperview];

с

[_view removeFromSuperview];

_view = nil;

потому что то, что вы делаете, это установка _view в nil а затем удаление nil из супервизии.

Другие вопросы по тегам