iPhone Переключатель просмотров _KILL ! Проблема

у меня проблема с переключением вида между двумя представлениями с файлами пера! вот мой код. моя первая страница переходит на страницу 2! но на странице 2 я не могу вернуться на первую страницу! мое приложение выходит .. вот мой код:

со страницы 1 на 2:

    #import "HafezViewController.h"
#import "GhazaliateHafez.h"


-(IBAction)gh:(id)sender {
    HafezViewController *ghPage = [[HafezViewController alloc] initWithNibName: @"GhazaliateHafez" bundle:nil];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.3];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlDown forView:self.view cache:YES];
    [self.view addSubview:ghPage.view];
    [UIView commitAnimations];
}

^^^^^^^^^ этот код отлично работает! но со страницы 2 назад:

#import "GhazaliateHafez.h"
#import "HafezViewController.h"

@implementation GhazaliateHafez


-(IBAction)ghtoIndex:(id)sender {
    HafezViewController *back1 = [[HafezViewController alloc] initWithNibName:@"index" bundle:nil];
    [UIView beginAnimations:nil context:NULL];
    [UIView setAnimationDuration:1.5];
    [UIView setAnimationTransition:UIViewAnimationTransitionCurlUp forView:self.view cache:YES];
    [self.view addSubview:back1.view];
    [UIView commitAnimations];

}

после того, как я нажму кнопку «Назад», мое приложение вылетает... в чем моя проблема? Спасибо


person Momi    schedule 30.10.2009    source источник
comment
Я настоятельно рекомендую вам отредактировать свой пост, чтобы исправить форматирование вашего кода. Читать в нынешнем состоянии очень тяжело.   -  person Sixten Otto    schedule 30.10.2009


Ответы (2)


Вы добавляете view2 в view1, а затем добавляете view1 обратно в view2. Когда закончите с View2, простой вызов self.view.removeFromSuperview и снова отобразится представление 1.

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

person marcc    schedule 30.10.2009
comment
Поэтому я должен изменить эту строку [self.view addSubview:back1.view]; к этому ? : [self.view.removeFromSuperview]; - person Momi; 30.10.2009

Две мысли, которые могут помочь вам в пути:

Я думаю, вы могли бы запустить это через инструменты. У тебя утечка памяти? Вы выделяете представление для каждого клика, затем кешируете его... вы их выпускаете?

Было бы проще иметь два вида, которые существуют отдельно от этого, например, в массиве, а затем индексировать тот, который вы хотите сделать активным, и обернуть его в цикл анимации выше, освобождая и скрывая другой? Не совсем уверен, как заставить другое представление исчезнуть по команде, поскольку выпуск контролируется мусором... но я знаю, что есть способ сделать это.

И это из предыдущего сообщения, которое помогло мне, когда я спрашивал, как немедленно удалить подпредставление:


myGroovySubview.hidden = YES; скрывает представление. Вы также можете попытаться удалить его из супервизора с помощью [myGroovySubview removeFromSuperview];

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

person Spanky    schedule 30.10.2009
comment
to marc : Так что я должен изменить эту строку [self.view addSubview:back1.view]; к этому ? : [self.view.removeFromSuperview]; ?? - person Momi; 31.10.2009
comment
Начните с представления 1. Затем добавьте подпредставление 2. Когда вы закончите с подпредставлением 2, удалите его из суперпредставления. У вас остается подвид 1. В коде вы добавляете представление 2 с помощью addSubview... и удаляете представление 2 с помощью removeFormSuperview... - person Spanky; 31.10.2009
comment
спасибо ... но вы можете написать правильный код? я любитель :( - person Momi; 31.10.2009