objective-c - pushViewController 失败
<p><p>我正在尝试做一个“项目列表”->“项目详细信息”类型的应用程序。
到目前为止,我已经成功地完成了列表部分。我还为项目详细信息创建了一个新 View ,但是当我单击要查看详细信息的项目时出现错误。</p>
<pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
ItemDetailsView *detailViewController = [ initWithNibName:@"DetailView" bundle:];
// ERROR HERE
;
;
}
</code></pre>
<p>到目前为止,新 View 只有一个空标签,上面写着“ View 已更改:确定”。没有别的了。</p>
<p>ItemDetailsView 是继承自 UIViewController 的 View 。</p>
<p>为了创建这个 View ,我进入了 New File -> Cocoa Touch -> UIViewController 子类。</p>
<p>当我尝试执行下面的行时,我得到的错误是“signabrt”//ERROR HERE</p>
<p>下面是完整的消息:</p>
<pre><code>2011-10-02 17:26:03.582 Teste Data Nav *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Could not load NIB in bundle: 'NSBundle </Users/leo/Library/Application Support/iPhone Simulator/4.3.2/Applications/FA60D1E7-1B98-4943-98AA-C86A2339AC3E/Teste Data Nav.app> (loaded)' with name 'DetailView''
*** Call stack at first throw:
(
0 CoreFoundation 0x00dc25a9 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x00f16313 objc_exception_throw + 44
2 CoreFoundation 0x00d7aef8 + + 136
3 CoreFoundation 0x00d7ae6a + + 58
4 UIKit 0x0020f0fa - + 2024
5 UIKit 0x00210ab7 - + 168
6 UIKit 0x000c6628 - + 70
7 UIKit 0x000c4134 - + 120
8 UIKit 0x000c400e - + 56
9 UIKit 0x000c2482 - + 42
10UIKit 0x000d2f25 - + 48
11UIKit 0x000d1555 - + 43
12UIKit 0x000d27aa - + 326
13UIKit 0x000cd32a - + 266
14UIKit 0x000d4562 - + 932
15UIKit 0x000cd1c4 - + 62
16Teste Data Nav 0x00002d4c - + 220
17UIKit 0x0008bb68 - + 1140
18UIKit 0x00081b05 - + 219
19Foundation 0x0079b79e __NSFireDelayedPerform + 441
20CoreFoundation 0x00da38c3 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ + 19
21CoreFoundation 0x00da4e74 __CFRunLoopDoTimer + 1220
22CoreFoundation 0x00d012c9 __CFRunLoopRun + 1817
23CoreFoundation 0x00d00840 CFRunLoopRunSpecific + 208
24CoreFoundation 0x00d00761 CFRunLoopRunInMode + 97
25GraphicsServices 0x00ffa1c4 GSEventRunModal + 217
26GraphicsServices 0x00ffa289 GSEventRun + 115
27UIKit 0x00022c93 UIApplicationMain + 1160
28Teste Data Nav 0x000023b9 main + 121
29Teste Data Nav 0x00002335 start + 53
)
terminate called throwing an exceptionCurrent language:auto; currently objective-c
</code></pre></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>基本上,它找不到名为“DetailView”的 .xib 文件。确保您的 <code>initWithNibName:</code> 具有 <code>.xib</code> 文件的正确字符串名称。</p>
<p>该错误的重要部分是:</p>
<pre><code>Could not load NIB in bundle: 'NSBundle </.../Teste Data Nav.app> (loaded)' with name 'DetailView'
</code></pre>
<p>这意味着您的包中没有名为 <code>DetailView</code> 的 .xib 文件。确保使用正确的文件名:</p>
<pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
ItemDetailsView *detailViewController = [ initWithNibName:@"ItemDetailsView" bundle:nil];
// ERROR HERE
;
;
}
</code></pre>
<hr/>
<p>编辑(来自注释)将 View 连接到 <code>File's Owner</code>,如下所示:</p>
<p> <img src="/image/tcIWj.png" alt="enter image description here"/> </p>
<hr/>
<p>确保 <code>self</code> 有一个 <code>navigationController</code> 父级。如果这是应用启动时出现的主视图,您需要将 UINavigationController 添加到 <code>MainWindow.xib</code> 并将其 rootViewController 设置为具有此表的 ViewController 。 </p>
<p>您可以通过以下方式进行测试:</p>
<pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog("self.navController view controllers: %@", [[ viewControllers] description]);
// Or something like this:
if (self.parentViewController == self.navigationController) {
NSLog(@"I have a nav controller dad!");
} else {
NSLog(@"I have no nav controller!");
}
// ItemDetailsView *detailViewController = [ initWithNibName:@"DetailView" bundle:];
// ERROR HERE
// ;
// ;
}
</code></pre>
<p>如果 NSLog 打印出一个 ViewController 数组,那么还有另一个问题,但是如果它在 <code>NSLog</code> 上抛出错误或者它打印出一个空数组,那么你的 <code>self </code> 没有 <code>navigationController</code> 父级。</p></p>
<p style="font-size: 20px;">关于objective-c - pushViewController 失败,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/7628858/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/7628858/
</a>
</p>
页:
[1]