Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios initWithNibName:@"-VS-self.storyboard实例化eviewcontrollerwhiteIdentifier:@";?_Ios_Iphone_Objective C_Xcode - Fatal编程技术网

Ios initWithNibName:@"-VS-self.storyboard实例化eviewcontrollerwhiteIdentifier:@";?

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

我在做什么:

大家好,我目前正在学习iOS开发。我遇到了一个问题,我已经解决了。然而,我不知道到底发生了什么,它起作用了。 我正在做一个DrinkMixer应用程序,它来自一本名叫《头一代Iphone和Ipad开发》(第二版)的书。这本书是为Xcode 4和iOS4 Sdk编写的,而我使用的是带有iOS 7的Xcode 5

目标:

我试图创建一个新的视图,我想作为一个模式视图推送,以便让用户填写新的饮料信息

代码断点:

@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不像我使用的那样工作。