2017-01-25 6 views
1

Я пытаюсь добавить новый раскадровки в Swift в старые приложения Objective-C:Initialize Swift раскадровки из Objective-C

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MainStoryboard01" bundle:nil]; 
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"OnboardingViewController"]; 
[self presentViewController:vc animated:YES completion:NULL]; 

С Swift раскадровки:

Onboarding Storyboard

I 'всегда возникает ошибка:

'Could not find a storyboard named 'MainStoryboard01' in bundle NSBundle <.../Developer/CoreSimulator/Devices/753636C1-ABB5-4D6E-B184-5C4638FB2CE9/data/Containers/Bundle/Application/398410C0-BB2C-4574-B058-95D30F8D1B5D/Credit Call.app> (loaded)'

Вызов быстрых классов, таких как TestClass * instance = [TestClass new]; [экземпляр testFunction];

Обычно работает. Любая идея, как вызвать оперативную раскадровку + это swfit-контроллер в приложении Objective-C?

// EDIT:

я наконец-то работает так:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Onboarding" bundle:nil]; 
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"MainStoryboard01"]; 

но на следующей строке

[self presentViewController:vc animated:YES completion:NULL]; 

Я получаю эту ошибку:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[MyAppDelegate presentViewController:animated:completion:]: unrecognized selector sent to instance 0x6080000b3b60'

Любые идеи ? Мне нужно, чтобы заменить это раскадровки:

Registration *reg = [[Registration alloc] init]; 
registrationNav = [[UINavigationController alloc] initWithRootViewController:reg]; 
[reg release]; 
[self.mainBackgroundView addSubview:[registrationNav view]]; 

=>https://codepaste.net/jkfras Я добавил скелет MyAppDelegate.m

ответ

1

Вы делаете ошибку здесь, MainStoryboard01, что вы установили это Storyboard Identifer с помощью который вы можете instantiateViewControllerWithIdentifier. Это не другое имя раскадровки. Так что это должно быть просто так.

enter image description here

//You need to put storyboard name here the check the image for more detail 
UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"MainStoryboard01"]; 
[self presentViewController:vc animated:YES completion:nil]; 

Edit: Попробуйте этот путь.

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; 
UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"MainStoryboard01"]; 
[self.mainBackgroundView addSubview:[vc view]]; 
+0

Я не инициализирую его из существующей раскадровки, но прямо из инициализации приложения. Это сделано только с контроллерами вызовов, и в приложении пока нет раскадровки. Не могли бы вы помочь мне инициализировать как первый[email protected] nirav-d большое спасибо! – David

+0

@David Проверьте отредактированный ответ :) –

+0

@David Вы проверили отредактированный ответ, работает ли он сейчас? –

1

Если вы хотите сослаться на раскадровку, то вы должны использовать свое имя, так что если ваша раскадровка имеет название «MyNewStoryboard» (MyNewStoryboard.storyboard), то правильный путь, чтобы создать свою ссылку, как это:

UIStoryboard *sb = [UIStoryboard storyboardWithName:@"MyNewStoryboard" bundle:nil]; 

Не используйте идентификатор раскадровки здесь. Идентификатор раскадровки, который вы только что установили в атрибутах контроллера, является идентификатором вашего контроллера. Таким образом, вы можете использовать его таким образом:

UIViewController *vc = [sb instantiateViewControllerWithIdentifier:@"MainStoryboard01"]; 

Изменение вашего нового контроллера раскадровки ID к чему-то более информативным, так, например, «OnboardingViewController», а затем после ввода ваше имя файла раскадровки в первой строке ваш код должен быть хорошо ,

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