просто подумал, проверили ли вы идентификатор в раскадровке, и это правильное написание для вашего идентификатора? Мне пришлось изменить свой комментарий, так как я был неправ в первом разделе. просто проверьте идентификатор в раскадровке и убедитесь, что он правильный. Adrian P 18.03.2013
да, я пытаюсь перейти от класса NSObject к контроллеру представления. Я также пытался поместить его в класс NSObject, но это не сработало. Я поместил код перехода как есть в класс NSObject. birdcage 18.03.2013
Вы проверили идентификатор, который соединяет класс контроллера представления со следующим представлением? идентификатор перехода может быть проблемой. а также в вашем методе перехода Palinolojik является местом назначения перехода, но в вашем классе объектов ns идентификатор связан с derinlikview. представление назначения должно быть одним из них, а не обоими. Adrian P 18.03.2013
DerinlikView - это имя Class2. Я проверил соединения. Они в порядке. Если я звоню из Class2, это работает, но мне нужно выполнить переход из класса NSObject. На самом деле я ищу решение, которое позволит мне выполнить переход из класса NSObject. Я имею в виду от Class2 до Palinolojik. birdcage 18.03.2013
поэтому вы говорите, что когда вы вызываете [self performSegue] в своем Class2, он выполняет переход, но когда вы вызываете тот же метод из другого класса, такого как [derinlik performSegue], он говорит has no segue with identifier 'DerinlikToPali' u.gen 18.03.2013
Class1 *callNsObject= [[Class1 alloc] init];
UIViewController *currentVC=self;//this is the part you need the pass current viewcontrollers pointer to your nsobject class depends on your project thee are multiple ways of doing it.
callNsObject.viewController=currentVC;
Важно: я не знаю иерархии вашего контроллера представления Class2, поэтому в строке UIViewController *currentVC=self; вы должны изменить self на указатель текущего контроллера представления.
Например, если это приложение, основанное на навигации, вы можете получить текущий контроллер представления, UIViewController *currentVC = self.navigationController.visibleViewController;
Также я предполагаю, что ваше представление Class2 помещается в стек, прежде чем вы вызовете свой метод Class1
Ответ 2 · рейтинг 7 · user2327003
У меня была такая же проблема, и мне удалось решить ее с помощью NSNotificationCenter.
В примечании к ошибке говорится, что "DerinlikToPali" не найден в StoryBoard.
Перейдите на свой StoryBoard, выберите переход и проверьте его инспектор атрибутов (меню "Вид" - "Утилиты" - "Показать инспектор атрибутов"). Убедитесь, что идентификатор - это та же строка, которую вы используете в PerformSegueWithIdentifier.
Обновление (после просмотра SampleProject):
SampleClass *sample = [SampleClass alloc] в общем случае должен быть "alloc init", чтобы вы не только выделяли память, но и выполняли полную инициализацию объекта.
Метод SampleClassToSegue() не создает объект ViewController, как вы ожидали. Сначала см. выше "alloc init", но в этом случае вам нужно больше (ниже). В противном случае у вас НЕ будет действительного объекта UIViewController. Обратите внимание, что вы должны сначала дать ему имя на StoryBoard, чтобы вы могли создать его (используя это имя). Альтернативой является использование XIB вместо StoryBoard, и в этом случае вы используете initWithNibName:bundle:
Самая большая проблема логична, и я надеюсь, что это только внутри этого SampleProject: объект A создается, создает объект B, который создает объект A и вызывает его метод... за исключением того, что создание объекта A снова создает объект B --> и у нас есть вечный цикл, и что-то рухнет .
В любом случае, мой обновленный ответ заключается в том, что ваше создание объекта не было завершено до того, как вы попытались запустить переход. В частности, "ViewController" еще не был фактическим UIViewController, определенным в StoryBoard, и поэтому не имел ожидаемого перехода.