Выдано исключение Objective-C. Имя: NSInvalidArgumentException Причина: не удалось найти раскадровку с именем ‘visit_info’ в пакете NSBundle

#c# #ios #xamarin.ios #storyboard #visual-studio-2019

#c# #iOS #xamarin.ios #раскадровка #visual-studio-2019

Вопрос:

Я получаю эту ошибку всякий раз, когда пытаюсь получить доступ к ViewController из другой раскадровки программно. Похоже, что мое приложение xamarin.ios не распознает раскадровку, в которой находится ViewController. Мое имя раскадровки visit_info.storyboard .

Я попробовал следующий код

  UIStoryboard board = UIStoryboard.FromName("visit_info", null);
            UIViewController ctrl = (visitController)board.InstantiateViewController("visitController");
            ctrl.ModalTransitionStyle = UIModalTransitionStyle.CrossDissolve;
            this.PresentViewController(ctrl, true, null);
  

Вот полная ошибка, которую я получаю в первом утверждении выше:

 Objective-C exception thrown.  Name: NSInvalidArgumentException Reason: Could not find a storyboard named 'visit_info' in bundle NSBundle </Users/amer/Library/Developer/CoreSimulator/Devices/3B343541-D0E1-410E-880C-18E9FE0289D8/data/Containers/Bundle/Application/A01C5D60-96A8-4BF8-993B-C0D90EE7EE5A/samra_op2.app> (loaded)
Native stack trace:
    0   CoreFoundation                      0x00007fff2043a126 __exceptionPreprocess   242
    1   libobjc.A.dylib                     0x00007fff20177f78 objc_exception_throw   48
    2   UIKitCore                           0x00007fff247e48a6 -[UIStoryboard name]   0
    3   samra_op2                           0x0000000100696699 xamarin_dyn_objc_msgSend   217
    4   ???                                 0x00000001062ec539 0x0   4398695737 


 
  

Комментарии:

1. В целях проекта -> Build Phases -> Copy Bundle Resources visit_into.storyboard существует ли?

2. это в Visual Studio? Я не могу ее найти

3. Извините, моя ошибка, я не заметил, что это Xamarin. Исключение, которое у вас есть, означает, что нет раскадровки с именем «visit_info», поэтому вам действительно нужно проверить, копируется ли файл.

Ответ №1:

Я думаю, что там есть опечатка, ваше имя раскадровки visit_into.storyboard , в то время как в вашем коде это UIStoryboard .FromName(« visit_info «, null); .

Пожалуйста, будьте осторожны с into и info .

Ваши коды выглядят нормально:).

Обновить:

Следуйте моим инструкциям и сделайте это снова:

1. Я создал новый проект iOS и right click the project -> add -> new item -> ViewController With Storyboard

2. Перейдите к только что созданной раскадровке и перейдите в окно инструментов, выберите новый ViewContrllor и добавьте его в раскадровку.

3.Перейдите на properties панель ViewContrllor в раскадровке и установите Class Storyboard ID там и, также проверьте Use Storyboard ID .

4. Затем в другом ViewController вызовите свой код:

 public override void ViewDidAppear(bool animated)
{
    base.ViewDidAppear(animated);

    UIStoryboard board = UIStoryboard.FromName("visit_info", null);
    UIViewController ctrl = (visit_info)board.InstantiateViewController("visit_info");// here use storyboard ID
    ctrl.ModalTransitionStyle = UIModalTransitionStyle.CrossDissolve;
    this.PresentViewController(ctrl, true, null);
}
  

Комментарии:

1. это не так . Я только неправильно написал имя при переполнении стека, а не в коде

2. Я просто тестирую код, и он работает хорошо. Не могли бы вы удалить visit_info.storyboard и создать новую, а затем повторить попытку?

3. Я попробовал, это ничего не изменило, все еще сталкиваясь с той же проблемой.

4. Возникнет ли у вас та же проблема, если вы вызовете UIStoryboard. FromName(«Main», null);?

5. если я использую UIStoryboard.FromName("Main", null); ее, во второй строке появляется сообщение об ошибке, в котором говорится, что нет контроллера с именем visitController . Objective-C exception thrown. Name: NSInvalidArgumentException Reason: Storyboard (<UIStoryboard: 0x6000028939c0>) doesn't contain a view controller with identifier 'visitController'

Ответ №2:

Я знаю ответ, но мне нужно объяснение . Когда я создавал контроллер в первый раз, я отредактировал имя, а затем изменил все другие имена, связанные с контроллером, включая имя класса контроллера в controller.cs , controller.designer.cs и controller properties . Когда я попробовал старое имя контроллера, оно каким-то образом сработало.