我已经就这个问题找到了很多答案,但似乎没有一个与我的问题有关。
我有两个视图,视图1有一个按钮。视图2有一个按钮。
View 1按钮与模型segue绑定到View 2。
我点击了视图1中的按钮,它打开了视图2。
在视图2中,按钮连接到发射的IBAction
[self dismissViewControllerAnimated:YES completion:nil];
关闭视图并再次显示视图1 - 现在,如果我再次按下视图1上的按钮,则
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle <x/y/z/SomeApp.app> (loaded)' with name 'tvz-Io-ndz-view-rB8-bq-l6j' and directory 'Main.storyboardc''
我完全忘记了如何解决这个问题。请帮忙!
编辑:
编辑2:
我也尝试过从头开始重建屏幕。
我完全不知所措。
编辑3:完整Stacktrace
2015-01-19 09:10:58.528 SomeApp[37747:2203364] *** Terminating app due to
uncaught exception 'NSInternalInconsistencyException', reason: 'Could not
load NIB in bundle: 'NSBundle
</Users/user/Library/Developer/CoreSimulator/Devices/D23C1B7C-7330-
466E-8369-762C6727B19C/data/Containers/Bundle/Application/AE67C3D3-C5AE-
4A66-91EC-54D976A4A4FC/SomeApp.app> (loaded)' with name 'tvz-Io-ndz-view-
rB8-bq-l6j' and directory 'Main.storyboardc''
*** First throw call stack:
(
0 CoreFoundation 0x01f64946 __exceptionPreprocess + 182
1 libobjc.A.dylib 0x01beda97 objc_exception_throw + 44
2 CoreFoundation 0x01f6486d +[NSException raise:format:] + 141
3 UIKit 0x008f8e06 -[UINib instantiateWithOwner:options:] + 1003
4 UIKit 0x0071b624 -[UIViewController _loadViewFromNibNamed:bundle:] + 270
5 UIKit 0x0071bdbb -[UIViewController loadView] + 295
6 UIKit 0x0071bfef -[UIViewController loadViewIfRequired] + 78
7 UIKit 0x0071c595 -[UIViewController view] + 35
8 UIKit 0x00d8f707 -[_UIFullscreenPresentationController _setPresentedViewController:] + 75
9 UIKit 0x006f1a81 -[UIPresentationController initWithPresentedViewController:presentingViewController:] + 113
10 UIKit 0x00729a61 -[UIViewController _presentViewController:withAnimationController:completion:] + 2102
11 UIKit 0x0072c5d2 __62-[UIViewController presentViewController:animated:completion:]_block_invoke + 345
12 UIKit 0x0072c424 -[UIViewController presentViewController:animated:completion:] + 224
13 UIKit 0x0072c8ea -[UIViewController presentModalViewController:animated:] + 57
14 UIKit 0x00bf448d -[UIStoryboardModalSegue perform] + 271
15 UIKit 0x00be1b49 -[UIStoryboardSegueTemplate _perform:] + 217
16 UIKit 0x00be1bc5 -[UIStoryboardSegueTemplate perform:] + 116
17 UIKit 0x006d4907 -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:] + 1490
18 UIKit 0x006d4af7 -[UITableView _userSelectRowAtPendingSelectionIndexPath:] + 285
19 UIKit 0x006d9df3 __38-[UITableView touchesEnded:withEvent:]_block_invoke + 43
20 UIKit 0x005ee0ce ___afterCACommitHandler_block_invoke + 15
21 UIKit 0x005ee079 _applyBlockToCFArrayCopiedToStack + 415
22 UIKit 0x005ede8e _afterCACommitHandler + 545
23 CoreFoundation 0x01e879de __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 30
24 CoreFoundation 0x01e87920 __CFRunLoopDoObservers + 400
25 CoreFoundation 0x01e7d35a __CFRunLoopRun + 1226
26 CoreFoundation 0x01e7cbcb CFRunLoopRunSpecific + 443
27 CoreFoundation 0x01e7c9fb CFRunLoopRunInMode + 123
28 GraphicsServices 0x043d524f GSEventRunModal + 192
29 GraphicsServices 0x043d508c GSEventRun + 104
30 UIKit 0x005c48b6 UIApplicationMain + 1526
31 SomeApp 0x000e482d main + 141
32 libdyld.dylib 0x027e8ac9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
詹姆斯
答案 0 :(得分:28)
可能有很多原因会导致您收到错误。
我将开始列举一些要检查的内容和解决方案:
您是否在Xcode外重命名了xib或storyboard文件?如果是这样,请检查您所引用的任何地方是否存在不一致。另外,请确保在引用文件的任何地方都尊重大写/小写字母,因为区分大小写。
转到Interface Builder,选择View1 ViewController&gt;公用事业小组&gt; Identity Inspector
&gt;如果你有一个(.h和.m文件),检查Custom Class
是否对应于你的ViewController类。
检查您的Info.plist
文件。如果您使用storyboads,则应该有Main storyboard file base name
和NOT Main nib file base name
之类的条目。如果使用笔尖,则反之亦然。还要检查文件基名是否与实际文件的名称一致。
检查您的目标Build Phases > Copy Bundle Resources
并确保在那里添加了xib或storyboard文件。
如果以编程方式实例化View1 ViewController,并使用xib文件检查错别字的笔尖名称(请记住,区分大小写)。
此外,如果您当前将.xib文件格式附加到名称,请删除该扩展名,因为它不应该被使用。我的意思是这行代码:UIViewController *controller = [[UIViewController alloc] initWithNibName:@"xibFileName" bundle:nil];
在文件检查器中检查xib或情节提要文件的属性,并确保在Target Membership
选择面板中将文件链接到目标。
检查文件检查器中xib或情节提要文件的属性,然后尝试将文件Location
切换为Relative to project
或Relative to group
。看看两种方式是否有所不同。
如果您在initWithCoder
中以编程方式添加视图控制器,则应使用viewDidLoad
方法实例化
如果上述情况不适用于您的情况,您可以从Xcode中删除该文件(选择Remove References
)并在项目中再次导入。
请记住,在进行上述更改后,请务必清理项目(SHIFT + COMMAND + K)。
如果有效且有效,请告知我们。
答案 1 :(得分:2)
我尝试了以上所有答案,但他们没有工作。对我来说,解决方案是将xib包含在目标资源中。
执行的步骤:
答案 2 :(得分:1)
在访问xib之前,您可能必须为该类设置包:
的ObjectiveC:
//Bundle initialisation
NSBundle* bundle = [NSBundle bundleForClass:[self class]];
//Initialising the nib
UIView *nibView = [[bundle loadNibNamed:@"nibFileName" owner:self options:nil] objectAtIndex:0];
//Display the ad (this will vary based on your application setup)
[[[UIApplication sharedApplication] keyWindow] addSubview:nibView];
答案 3 :(得分:1)
当我从zip文件中提取.app并尝试在iOS设备和Simulator上运行它时,我遇到了这个问题。
一个.nib文件已用非拉丁字符(fileNormal.nib
和希腊字母No
)命名,并且从zip提取时,它是从另一个字符集分配的字母(应为希腊字母) -DOS或兼容的东西)。我在提取时选择了另一个字符集,它应能正常工作。
只要其他人遇到相同的问题,就把它放进去;)
答案 4 :(得分:0)
答案 5 :(得分:0)
UITableViewDataSource或UITableViewDelegate也未在所需的UIViewController中实现
答案 6 :(得分:0)
如果你正在使用cocoapods,它也可能有助于运行pod update
。我的一个队友换了一个吊舱导致了这个错误,所以pod更新为我修好了。
答案 7 :(得分:0)
在我的情况下,完全相同的例外是由于两个控制器具有相同的故事板ID(在一个故事板中)而引起的