Ios initWithNibName:@"-VS-self.storyboard实例化eviewcontrollerwhiteIdentifier:@";?
我在做什么: 大家好,我目前正在学习iOS开发。我遇到了一个问题,我已经解决了。然而,我不知道到底发生了什么,它起作用了。 我正在做一个DrinkMixer应用程序,它来自一本名叫《头一代Iphone和Ipad开发》(第二版)的书。这本书是为Xcode 4和iOS4 Sdk编写的,而我使用的是带有iOS 7的Xcode 5 目标: 我试图创建一个新的视图,我想作为一个模式视图推送,以便让用户填写新的饮料信息 代码断点:Ios initWithNibName:@"-VS-self.storyboard实例化eviewcontrollerwhiteIdentifier:@";?,ios,iphone,objective-c,xcode,Ios,Iphone,Objective C,Xcode,我在做什么: 大家好,我目前正在学习iOS开发。我遇到了一个问题,我已经解决了。然而,我不知道到底发生了什么,它起作用了。 我正在做一个DrinkMixer应用程序,它来自一本名叫《头一代Iphone和Ipad开发》(第二版)的书。这本书是为Xcode 4和iOS4 Sdk编写的,而我使用的是带有iOS 7的Xcode 5 目标: 我试图创建一个新的视图,我想作为一个模式视图推送,以便让用户填写新的饮料信息 代码断点: @autoreleasepool { return UIAppli
@autoreleasepool
{
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
}
破坏代码:
-(IBAction)addButtonPressed:(UIBarButtonItem *)sender
{
DummyAddDrink *someDrink = [[DummyAddDrink alloc] initWithNibName:@"DetailViewController" bundle:nil];
[self presentModalViewController:someDrink animated:YES];
}
-(IBAction)addButtonPressed:(UIBarButtonItem *)sender
{
DummyAddDrink *someDrink = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];[/u][/b]
[self presentModalViewController:someDrink animated:YES];
}
工作代码:
-(IBAction)addButtonPressed:(UIBarButtonItem *)sender
{
DummyAddDrink *someDrink = [[DummyAddDrink alloc] initWithNibName:@"DetailViewController" bundle:nil];
[self presentModalViewController:someDrink animated:YES];
}
-(IBAction)addButtonPressed:(UIBarButtonItem *)sender
{
DummyAddDrink *someDrink = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"];[/u][/b]
[self presentModalViewController:someDrink animated:YES];
}
代码说明:
addButtonPressed连接到“导航栏”中的“栏按钮项”。单击BBI时,它将调用aBP。aBP通过从名为“DetailViewController”的现有控制器子类化来创建新视图。DVC在IB中有自己的.h、.m、VC
错误输出:
2013-12-18 09:57:02.735 DrinkMixer_Take_2[848:70b] NSBundle </Users/.../Library/Application Support/iPhone Simulator/7.0/Applications/408E0817-824B-40A6- B1B2-34DDC8043712/DrinkMixer_Take_2.app> (loaded)
2013-12-18 09:57:37.105 DrinkMixer_Take_2[848:70b] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/.../Library/Application Support/iPhone Simulator/7.0/Applications/408E0817-824B-40A6- B1B2-34DDC8043712/DrinkMixer_Take_2.app> (loaded)' with name 'DetailViewController''
initWithNibName
在使用.xib创建viewController时以及以这种方式处理视图时使用。即使如此,除非绝对必要,否则也应该避免使用这种方法
另一方面,
实例化ViewControllerWithiIdentifier
是在使用故事板时创建新viewController的首选方法,在这种情况下,前面的方法不起作用。因此,如果我没有选中“用户界面使用XIB”(在创建相应的viewController.h和.m时)我将无法使用initWithNibName方法?我问这个问题是因为我见过类似的方法,但没有任何相应的XIB文件。我想,如果你的控制器在故事板中被引用,就不会这样。也许有办法解决,但我强烈反对。一致性是关键,混合使用非标准代码,除非你最终得到的是意大利面代码。我很困惑为什么你会建议开发人员避免调用“UIViewController”类的指定初始值设定项,除非绝对必要这个问题和答案很好地概括了这一点:我同意Rob&Adris的观点。这个解释似乎合乎逻辑而且正确。此外,initWithNibName不像我使用的那样工作。