NSInternalInconsistencyException - 无法在软件包中加载NIB:

问题描述:

我正在尝试将所有.xib资源捆绑到“ViewController.bundle”中,以便与“MyLibrary.framework”一起发货。如果我只是把在框架项目中的所有文件的.xib,一切工作正常,但如果我把它们“ViewController.bundle”里,一切都掰开NSInternalInconsistencyException - 无法在软件包中加载NIB:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'Could not load NIB in bundle: 
'NSBundle </Users/administrator/Library/Application Support/iPhone Simulator/5.0/ 
Applications/8AD68FD1-158E-4926-AE03-8FEF870E7012/ios.app/ViewController.bundle> 
(not yet loaded)' with name 'FirstViewController_iPhone'' 
*** First throw call stack: 
(0x160e052 0x1071d0a 0x15b6a78 0x15b69e9 0x3ff838 0x2a6e2c 0x2a73a9 0x2a75cb 0x2c2b89 0x2c29bd 
0x2c0f8a 0x2c0d7e 0x2c0a22 0x2bfd88 0x5e3ac 0x2df8 0x2e34 0x160fec9 0x1e45c2 0x1e455a 0x289b76 
0x28a03f 0x2892fe 0x209a30 0x209c56 0x1f0384 0x1e3aa9 0x1eedfa9 0x15e21c5 0x1547022 0x154590a  
0x1544db4 0x1544ccb 0x1eec879 0x1eec93e 0x1e1a9b 0x2452 0x2385) 

我已经尝试了各种方式: 1。在Finder中创建“ViewController.bundle”,将所有.xib放在那里,然后拖动到xcode 2.为框架项目创建一个新的Target,在“OS X”部分的“Framework & Library”下选择“Bundle”注意:因为我使用的xcode 4.6在它的“Framework & Library”下没有“Bundle”,所以它必须是OSX,它曾经有,而且我用这个向导创建包含.png资源的bundle。

在这两种情况下,我已经确定“BuildController.bundle”存在于我的目标应用程序中的“Build Phase”>>“Copy Bundle Resources”中。 我也尝试过在我的Framework项目的“目标依赖项”下包含“ViewController.bundle”,但是我所有的努力都导致了同样的崩溃。

我也试过各种方式来加载.xib,无济于事。但是,下面的代码加载来自相同的“ViewController.bundle”为.png资源完美的作品:

// Loading .png resource works perfectly 
// UIImage* closeImage = [UIImage imageNamed:@"ViewController.bundle/first.png"]; 
// NSString *szBundlePath = [[NSBundle mainBundle] pathForResource:@"ViewController" ofType:@"Bundle"]; 
// UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"showView" message:szBundlePath delegate:nil cancelButtonTitle:@"ok" otherButtonTitles:nil]; 
// UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(220, 10, 40, 40)]; 
// [imageView setImage:closeImage]; 
// [alertView addSubview:imageView]; 
// [alertView show]; 
// return; 

使用相同的代码加载厦门国际银行失败:

NSBundle *bViewController = [NSBundle bundleWithURL:[[NSBundle mainBundle] URLForResource:@"ViewController" withExtension:@"bundle"]]; 
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) { 
    self.m_pFirstViewController = [[[FirstViewController alloc] initWithNibName:@"FirstViewController_iPhone" bundle:bViewController] autorelease]; 
    self.m_pSecondViewController = [[[SecondViewController alloc] initWithNibName:@"SecondViewController_iPhone" bundle:bViewController] autorelease]; 
} else { 
    self.m_pFirstViewController = [[[FirstViewController alloc] initWithNibName:@"ViewController.bundle/FirstViewController_iPad" bundle:nil] autorelease]; 
    self.m_pSecondViewController = [[[SecondViewController alloc] initWithNibName:@"ViewController.bundle/SecondViewController_iPad" bundle:nil] autorelease]; 
} 

    /** It crash in this line!! Note however, both m_pFirstViewController and m_pSecondViewController is allocated and not nil */ 
self.viewControllers = @[self.m_pFirstViewController, self.m_pSecondViewController]; 

    /** never reach here already crash */ 
[[[[UIApplication sharedApplication] keyWindow] rootViewController] presentViewController:self animated:YES completion:^{ 
    NSLog(@"presented!"); 
}]; 

我已经花了最后8小时调试这个,谷歌搜索和尝试各种建议,但无济于事......任何帮助,非常感谢!谢谢!

+0

我可以从xib中删除一些控件,并将它与xib配对。 – 2013-03-20 10:18:05

+0

不,所有的.xib都包含在内,但是,我检查了.app内的.bundle,它们都是按原样包含的。即:.xib,但错误似乎是期待编译版本(.nib) – Zennichimaro 2013-03-21 03:01:21

我尝试的第二种方法是最接近的......然后在Build Settings中将OSX包修改为iOS包。显然,我错过了几个步骤。我跟着马特加洛韦这里的教程和示例项目:

http://www.galloway.me.uk/tutorials/ios-library-with-resources/

,现在一切按预期工作。

感谢大家的帮助!

+0

谢谢!补充说明:如果你的png文件被转换成tiff,添加这个“用户定义的”构建设置: 'COMBINE_HIDPI_IMAGES = NO' – MechEthan 2013-04-12 17:34:13