菜鸟教程小白 发表于 2022-12-13 09:20:24

objective-c - pushViewController 失败


                                            <p><p>我正在尝试做一个“项目列表”->“项目详细信息”类型的应用程序。
到目前为止,我已经成功地完成了列表部分。我还为项目详细信息创建了一个新 View ,但是当我单击要查看详细信息的项目时出现错误。</p>

<pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{   
    ItemDetailsView *detailViewController = [ initWithNibName:@&#34;DetailView&#34; 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 &#39;NSInternalInconsistencyException&#39;, reason: &#39;Could not load NIB in bundle: &#39;NSBundle &lt;/Users/leo/Library/Application Support/iPhone Simulator/4.3.2/Applications/FA60D1E7-1B98-4943-98AA-C86A2339AC3E/Teste Data Nav.app&gt; (loaded)&#39; with name &#39;DetailView&#39;&#39;
*** 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: &#39;NSBundle &lt;/.../Teste Data Nav.app&gt; (loaded)&#39; with name &#39;DetailView&#39;
</code></pre>

<p>这意味着您的包中没有名为 <code>DetailView</code> 的 .xib 文件。确保使用正确的文件名:</p>

<pre><code>- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{   
    ItemDetailsView *detailViewController = [ initWithNibName:@&#34;ItemDetailsView&#34; 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(&#34;self.navController view controllers: %@&#34;, [[ viewControllers] description]);
    // Or something like this:
    if (self.parentViewController == self.navigationController) {
      NSLog(@&#34;I have a nav controller dad!&#34;);
    } else {
      NSLog(@&#34;I have no nav controller!&#34;);
    }
    // ItemDetailsView *detailViewController = [ initWithNibName:@&#34;DetailView&#34; 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]
查看完整版本: objective-c - pushViewController 失败