2013-04-15 4 views
1

Эти 4 файлы имеют отношение к этому сообщению:Как сохранить контроллер UIView (ARC)

FirstViewController имеет кнопку (не на панели навигации, отдельная кнопка), когда она нажата, страница должна скручивание до настоящего момента FilterViewController.

FirstViewController.h

- (IBAction)searchOptions:(id)sender; 

FirstViewController.m:

- (IBAction)searchOptions:(id)sender { 
    FilterViewController *ctrl = [[FilterViewController alloc] initWithNibName:@"FilterViewController" bundle:nil]; 
    [UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlUp completion:nil]; 

    [self.navigationController pushViewController:ctrl animated:NO]; 
} 

На FilterViewController у него есть UI материал, нужно нажать на кнопку, она сохраняет материал UI, а затем локоны страницу вниз для показа FirstViewController.

FilterViewController.h:

- (IBAction)backToMap:(id)sender; 

FilterViewController.m:

- (IBAction)backToMap:(id)sender { 
    FirstViewController *ctrl = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 
     [UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlDown completion:nil]; 

     [self.navigationController popViewControllerAnimated:YES]; 
} 

Проблема здесь с сохранением UIView. Как сохранить UIView?

Когда я нажимаю кнопку на FirstViewController, анимация работает, и страница отображается. Однако на FilterViewController при нажатии на кнопку он выходит из строя в отладчик с ошибкой:

EXC_BAD_ACCESS (код = 2, адрес = 0x8)

В консоли вывода он говорит: (lldb)

После страница curl up У меня есть степпер, когда я нажимаю на stepper, я получаю ту же ошибку в отладчике.

UPDATE: Я отследил ошибку ячейки памяти: http://i.imgur.com/dL18H9Z.png

Спасибо.

+0

«Проблема здесь с сохранением UIView»: это ** действительно * * неопределенный .. Попробуйте уточнить свой вопрос. Сбой вашего приложения? Вы получаете предупреждение? Что ожидается? Что происходит на самом деле? – rdurand

+0

Привет, извините за неопределенность - обновлено, надеюсь, что нижняя часть объясняет лучше –

ответ

3

Одна вещь, которую я замечаю, заключается в том, что вы нажимаете контроллер вида, а затем нажимаете другой контроллер вида с синтаксисом «назад». Это может быть проблемой: стек стека представляет собой стек. Если вы начинаете с представления 0, нажмите view 1, если вы хотите вернуться к просмотру 0, вы видите «pop» view 1, вместо того, чтобы снова нажать вид 0.

Так:

- (IBAction)backToMap:(id)sender { 
     FirstViewController *ctrl = [[FirstViewController alloc] initWithNibName:@"FirstViewController" bundle:nil]; 
     [UIView transitionFromView:self.view toView:ctrl.view duration:1 options:UIViewAnimationOptionTransitionCurlDown completion:nil]; 

     [self.navigationController popViewControllerAnimated:YES]; 
} 
+0

Hi Isaac, спасибо за комментарий. Я все еще новичок в obj-c, поэтому эти термины не так легки. Я обновил свой вопрос, но его управление памятью. Когда я сделал «зомби», он сказал, что на выходе я получаю '(lldb)' –

+0

@JoshBoothe Я обновил ответ. Я считаю, что ваша проблема в том, что вы нажимаете контроллер просмотра, когда вы должны появляться. – isaac

+0

спасибо за обновление. В нем говорится: «Нет видимого @interface для» UINavigationController объявляет селектор «popViewController: анимированный», не слишком уверен, что это значит –

0

Проблема здесь в том, что вы пытаетесь сделать анимацию между контроллерами зрения методом перехода UIView в.

Согласно документации:

fromView 
    The starting view for the transition. By default, this view is removed 
from its superview as part of the transition. 
toView 
    The ending view for the transition. By default, this view is added 
to the superview of fromView as part of the transition. 

Итак, когда вы вызываете этот метод, ваш взгляд ViewController в заменен другим видом с анимацией, и после того, как на стек помещается следующий ViewController без анимации, так что кажется, что все в порядке (но ваш первый вид контроллера уже заменен).

Но при попытке вернуть некоторое поведение ошибки - вы заменяете вид контроллера, который будет удален.

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

Например, вы можете смотреть следующее решение (это похоже на вас) - http://www.vigorouscoding.com/2011/05/custom-uiviewcontroller-transitions/

или

https://gist.github.com/jeksys/1507490

Смежные вопросы