#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 . Когда я попробовал старое имя контроллера, оно каким-то образом сработало.