Я пытаюсь загрузить вид, который содержит вид карты и 2 кнопки, из отдельного файла NOB.
РЕДАКТИРОВАТЬ: я должен был упомянуть, что я не должен создавать подкласс UIViewController, потому что я не хочу, чтобы представление было представлено стандартным способом (например, модальным). Я хочу, чтобы он занимал только четверть экрана, был прозрачным и отображался как всплывающее окно. Поэтому UIVIewController НЕ рекомендуется для представления, которое не займет весь экран или, по крайней мере, не будет представлено как стандартный модальный контроллер представления или контроллер иерархии UINavigationController.
Не желая использовать подкласс UIViewController (Apple говорит, что не делает этого), я решил создать ContainerObject, потомок NSObject, который будет обрабатывать соединения и освобождения.
Внутри объекта контейнера у меня есть только 1 IBOutlet: (представление). Я загружаю перо таким образом внутри функции init:
- (id)init {
self = [super init];
if (self) {
[[NSBundle mainBundle] loadNibNamed:"myNib" owner:self options:nil];
}
return self;
}
Внутри NIB есть представление, в котором есть MapView, и две кнопки. Как владелец файла, я установил класс моего объекта-контейнера и подключил выход «view» к выходу в владельце файла. Загрузка пера в порядке, и я могу загрузить его и добавить его представление в мое подпредставление.
self.currentLocationMapView = [[[CurrentLocationViewContainer alloc] init] autorelease];
self.currentLocationMapView.delegate = self;
[self.view addSubview:self.currentLocationMapView.view];
Проблема заключается в освобождении, поскольку, пока объект контейнера успешно освобожден, представление НЕ освобождается внутри него:
[self.currentLocationMapView.view removeFromSuperview];
self.currentLocationMapView = nil;
Сообщение dealloc моего пользовательского представления, которое лежит в объекте контейнера, никогда не вызывается. Я должен явно вызвать [self.currentLocationMapView.view release], чтобы освободить его, когда захочу.
Обратите внимание, что "self.currentLocationMapView.view" является объектом-контейнером в моем контроллере представления. Контейнерный объект содержит пользовательский вид, который в свою очередь содержит вид карты и 2 кнопки.