Переход к другому контроллеру представления в iOS при нажатии кнопки - программирование
Подтвердить что ты не робот

Переход к другому контроллеру представления в iOS при нажатии кнопки

Я очень новичок в iOS, и я все еще пытаюсь понять вещи. Я пробую эту простую программу в XCode 5, где, когда пользователь нажимает кнопку, он будет перенаправлен в другой контроллер представления. Я сделал то, что другие форумы говорили другим айерам, но я, кажется, сталкиваюсь с ошибкой.

Вот мои коды:

В ViewController.m:

- (IBAction)button1:(id)sender {

    WebServiceViewController *wc = [[WebServiceViewController alloc] 
           initWithNibName:@"WebServiceViewController" 
           bundle:nil];

    [self.navigationController pushViewController:wc animated:YES];
}

Я разместил в заголовках импорт "WebServiceViewController.h".

Ниже приведена ошибка (а не сообщение об ошибке IDE, но это не так):

enter image description here

Вот исключение:

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) 

Кроме того, я использую раскадровку. У меня есть начальная сцена, в которой пользователь входит в систему. В этой сцене встроен контроллер навигации. После входа в систему я не буду использовать segue, так как будет несколько контроллеров просмотра, которые могут быть загружены, в зависимости от того, какой тип пользователя вошел в систему. Я пытаюсь сделать эту простую программу, так как я буду использовать ее более сложным образом в будущем.

Я, очевидно, что-то пропустил. Я надеюсь, что кто-то может мне помочь. Я был бы очень благодарен.

EDIT:

Это сработало для меня

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

storyboardWithName зависит от имени раскадровки.

4b9b3361

Ответ 1

попробуйте следующее:

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

также устанавливает раскладку в WebServiceViewController в Identity Inspector

Ответ 2

Вы знаете, используя раскадровку, вы также можете определить сегмент, который не подключен напрямую к кнопке, имя, которое вызывается, а затем называть его программно так:

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

Я думаю, что этот подход более чист и более соответствует режиму работы раскадровки.

Конечно, в зависимости от того, какой пользователь вошел в систему, вы можете выполнять разные имена, чтобы перейти на соответствующий экран.