popToViewController выдает сообщение «Ошибка подтверждения», как его решить? - PullRequest
1 голос
/ 08 марта 2010

В CoreData у меня есть граф данных с некоторыми сущностями, и каждый объект заполняется в контроллере представления, на определенном экране, я хочу выдвинуть несколько (> 1) объектов, чтобы вернуться к определенному экрану.

Я попытался вывести контроллеры представления из стека навигации с помощью следующих строк кода:

ObjectA *objectA = objectD.objectC.objectA;
NSLog(@"objectA name: %@", objectA.name);
MyViewController    *controller = [[MyViewController alloc] initWithNibName:@"MyViewController" bundle:nil withObjectA:objectA];
[self.navigationController popToViewController:controller animated:YES];
[controller release];

ObjectA, objectB, objectC, objectD - все объекты из моего графа данных (с обратной зависимостью я могу запросить объект A от objectD до objectC)

Появляется следующее сообщение об ошибке:

Assertion failure in -[UINavigationController popToViewController:transition:], /SourceCache/UIKit_Sim/UIKit-984.38/UINavigationController.m:1807

Здесь есть два вопроса:

  • Если два объекта различны, почему они имеют одинаковое имя? обратная связь не может вернуть объект A, в котором я использовал для инициализации MyViewController?
  • Как у вас обычно работает popToViewController? Как реализовать сохранение / загрузку текущего состояния моего контроллера навигации, чтобы при выходе из приложения я мог перезагрузить контроллер навигации? Каковы лучшие практики?

Ответы [ 2 ]

2 голосов
/ 08 марта 2010

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

Используйте массив self.navigationController.viewControllers для ссылки на контроллер, который уже находится в стеке контроллера навигации.

1 голос
/ 08 марта 2010

popToViewController: может вернуть вас только к существующему ViewController, который уже находится в стеке UINavigationController. Вы выделяете совершенно новый контроллер, а затем пытаетесь подключиться к нему.

Граф объектов Core Data объектов вашей модели здесь не имеет прямого отношения; все popToViewController: имеет дело со стеком объектов ViewController.

Чтобы получить доступ к определенному ViewController, вам нужна ссылка на этот объект ViewController.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...