在button上单击iOS中的另一个视图控制器

我对iOS非常陌生,我仍然在努力去掌握一些东西。 我正在XCode 5中尝试这个简单的程序,当用户点击button时,他将被redirect到另一个视图控制器。 我做了其他论坛告诉别人做的事情,但我似乎遇到了一个错误。

这是我的代码:

在ViewController.m中:

- (IBAction)button1:(id)sender { WebServiceViewController *wc = [[WebServiceViewController alloc] initWithNibName:@"WebServiceViewController" bundle:nil]; [self.navigationController pushViewController:wc animated:YES]; } 

我在头文件中放置了一个导入“WebServiceViewController.h”。

这是错误(不是IDE错误消息,但不是成功的):

在这里输入图像说明

这是一个例外:

 2013-10-25 02:05:51.904 sample[16318:a0b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/Guest/Library/Application Support/iPhone Simulator/7.0/Applications/C6FA1F33-5E11-40C2-8C69-DA368F21CA5F/sample.app> (loaded)' with name 'WebServiceViewController'' *** First throw call stack: ( 0 CoreFoundation 0x017345e4 __exceptionPreprocess + 180 1 libobjc.A.dylib 0x014b78b6 objc_exception_throw + 44 2 CoreFoundation 0x017343bb +[NSException raise:format:] + 139 3 UIKit 0x004ca65c -[UINib instantiateWithOwner:options:] + 951 4 UIKit 0x0033cc95 -[UIViewController _loadViewFromNibNamed:bundle:] + 280 5 UIKit 0x0033d43d -[UIViewController loadView] + 302 6 UIKit 0x0033d73e -[UIViewController loadViewIfRequired] + 78 7 UIKit 0x0033dc44 -[UIViewController view] + 35 8 UIKit 0x00357a72 -[UINavigationController _startCustomTransition:] + 778 9 UIKit 0x00364757 -[UINavigationController _startDeferredTransitionIfNeeded:] + 688 10 UIKit 0x00365349 -[UINavigationController __viewWillLayoutSubviews] + 57 11 UIKit 0x0049e39d -[UILayoutContainerView layoutSubviews] + 213 12 UIKit 0x00294dd7 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 355 13 libobjc.A.dylib 0x014c981f -[NSObject performSelector:withObject:] + 70 14 QuartzCore 0x03aee72a -[CALayer layoutSublayers] + 148 15 QuartzCore 0x03ae2514 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 380 16 QuartzCore 0x03ae2380 _ZN2CA5Layer28layout_and_display_if_neededEPNS_11TransactionE + 26 17 QuartzCore 0x03a4a156 _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 294 18 QuartzCore 0x03a4b4e1 _ZN2CA11Transaction6commitEv + 393 19 QuartzCore 0x03a4bbb4 _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 92 20 CoreFoundation 0x016fc53e __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30 21 CoreFoundation 0x016fc48f __CFRunLoopDoObservers + 399 22 CoreFoundation 0x016da3b4 __CFRunLoopRun + 1076 23 CoreFoundation 0x016d9b33 CFRunLoopRunSpecific + 467 24 CoreFoundation 0x016d994b CFRunLoopRunInMode + 123 25 GraphicsServices 0x036859d7 GSEventRunModal + 192 26 GraphicsServices 0x036857fe GSEventRun + 104 27 UIKit 0x0022a94b UIApplicationMain + 1225 28 sample 0x00002e7d main + 141 29 libdyld.dylib 0x01d70725 start + 0 30 ??? 0x00000001 0x0 + 1 ) libc++abi.dylib: terminating with uncaught exception of type NSException (lldb) 

此外,我正在使用故事板。 我有一个用户login的初始场景。这个场景embedded了导航控制器。 login后,我不会使用segue,因为会有几个视图控制器可以加载,这取决于什么types的用户login。我试图做这个简单的程序,因为我要去使用它将来更复杂。

我明显失去了一些东西。 我希望有一个人可以帮助我。 我会很感激。

编辑:

这对我有效

 WebServiceViewController *wc = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"WebServiceViewController"]; [self.navigationController pushViewController:wc animated:YES]; 

storyboardWithName取决于故事板的名称(如果它不是很明显,嘿嘿)。

尝试这个:

 WebServiceViewController *wc = [[UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"WebServiceViewController"]; 

还在Identity Inspector中将storyboardId设置为WebServiceViewController

你知道,使用一个故事板,你也可以定义一个不直接连接到button的segue,名字是segue,然后像下面这样以编程方式调用它:

  [self performSegueWithIdentifier:@"showWebServiceViewController" sender:nil]; 

我认为这种方法更简洁,更符合故事板的工作方式。

当然,取决于哪个用户已经login,你可以执行不同的命名的赛格到达approporiate屏幕。