Почему removeFromSuperview не скрывает мой UIView в приложении для iPhone? - PullRequest
0 голосов
/ 29 января 2010

Я новичок в разработке для iPhone, и у меня возникают проблемы при удалении подвида из главного окна. Проблема в том, что представление все еще отображается даже после вызова removeFromSuperview.

Подвид создается и добавляется в дерево отображения с помощью этого кода:

// Instantiate the controller for the authentication view
AuthenticationController* controller = [AuthenticationController alloc];
[controller initWithNibName:@"AuthenticationView" bundle:[NSBundle mainBundle]];
authController = controller;

// Add the authentication view to the window
[[stateManager appWindow] addSubview:[authController view]];

Потом позже, и я проверил, что этот код запускается, установив точку останова, вот как я пытаюсь удалить представление:

[[authController view] removeFromSuperview];

В случае, если это имеет значение, вот код dealloc, который делает для владельца контроллера представления:

- (void)dealloc {
    [authController release];
    [super dealloc];
}

Что заставляет этот подвид продолжать отображаться?

Ответы [ 2 ]

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

Не уверен, что вы подразумеваете под "показать". На экране? В памяти?

Ваше «исправление» выглядит глючно, в том, что alloc дает вам одну ссылку, затем вы отпускаете ее, что избавляет от AuthenticationController. Который вы потом используете.

Может показаться, что это работает, поскольку никто не перезаписывал контроллер до того, как вы прочитали его представление, но это просто вызывает проблемы.

0 голосов
/ 29 января 2010

Я получил это работает. По-видимому, представление не исчезнет, ​​пока оно не будет освобождено, и у меня было неправильное понимание того, как управление памятью работает на этой платформе. Вот мой исправленный код:

AuthenticationController* controller = [[AuthenticationController alloc]
initWithNibName:@"AuthenticationView" bundle:[NSBundle mainBundle]];
controller.delegate = self;
authController = controller;
[controller release]; // <-- Problem was that a reference was being maintained
[[stateManager appWindow] addSubview:[authController view]];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...