【问题标题】:iPhone: App crashes when I click on a cell in table viewiPhone:当我单击表格视图中的单元格时,应用程序崩溃
【发布时间】:2011-02-10 12:13:17
【问题描述】:

编译我的应用程序工作正常——一切都很好。我得到的唯一错误是不推荐使用的函数(setText)。

现在唯一的问题是,当我点击表格中的一个单元格时,应用程序崩溃了,即使它是要推送到堆栈中的下一个视图。

感谢任何解决方案,如果您需要任何代码,请询问。

另外,我怎样才能确保一个单元格只进入一个视图?例如:

当我点击 CSS 时,它会将我带到一个具有不同 CSS 级别的新表格。当我在新视图中点击一个项目时,它会出现一篇关于我刚刚选择的文章。

问候,
杰克

这是我在 didSelectRowAtIndexPath 方法中的代码:

   -(void)tableView:(UITableView *)tableView
didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

    if(indexPath.row==0){

    NextViewController *nextController = [[NextViewController alloc]
                                          initWithNibName:@"NextView" bundle:nil];
    [self.navigationController pushViewController:nextController
                                         animated:YES];
    [nextController changeItemTable:[arryClientSide
                                     objectAtIndex:indexPath.row]];
}
}
@end

(根据 cmets 的要求)。

【问题讨论】:

  • 如果应用程序在点击单元格时崩溃,问题很可能出在 didSelectCell 方法中 - 您可以在这里发布吗?您还可以查看崩溃日志以查看错误描述。
  • 在调试模式下运行应用程序并找到应用程序崩溃的确切行,您还应该在控制台中收到一些错误消息(菜单运行/控制台或 cmd+shift+r 快捷方式)。
  • 这是错误:由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[UIViewController _loadViewFromNibNamed:bundle:] 加载了“NextView”笔尖,但未设置视图出口。我假设它与界面生成器有关

标签: iphone objective-c sdk


【解决方案1】:

由于未捕获而终止应用 例外 'NSInternalInconsistencyException', 原因:-[UIViewController _loadViewFromNibNamed:bundle:] 加载了“NextView”笔尖,但视图出口 没有设置。'

  1. 使用 Interface Builder 打开 NextView
  2. 将 Class 值设置为:“NextViewController”到您的文件所有者
  3. 连接 View 出口(Ctrl 单击并拖动 - 应出现一条蓝线 - 从 File Owner 到 UIView 并在选项中选择“view”)

【讨论】:

  • 谢谢。现在,我有另一个错误:由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“-[UITableViewController loadView] 加载了“NextView”笔尖,但没有得到 UITableView。我假设这与界面构建器不匹配有关。
  • 查看文档:developer.apple.com/iphone/library/documentation/UIKit/… ---- UITableViewController 必须设置它的 tableView 属性
  • 您能再解释一下吗?我对应用程序开发非常陌生,而且我只有 14 岁,所以我在某些地方使用技术术语可能很草率,而且我几乎没有太多时间。我尽量把东西放进去。
【解决方案2】:

不要使用 IB。相反,让 alloc init 什么都没有,然后在加载视图中:

self.view = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];

【讨论】:

    【解决方案3】:

    当我们使用 xib 接口创建新的 UIViewControllerSubClass 时,xib 文件被创建为 sourcecode.xib(可以在获取该 xib 文件的信息中看到):将 sourcecode.xib 更改为“file.xib”并看到魔法:)

    【讨论】:

      【解决方案4】:

      释放你分配的 NextViewController!

      [nextController release];
      

      它正在泄漏。

      【讨论】:

        【解决方案5】:

        来自 cmets 的错误描述:

        由于未捕获而终止应用 例外 'NSInternalInconsistencyException', 原因:'-[UIViewController _loadViewFromNibNamed:bundle:] 加载了“NextView”笔尖,但视图出口 没有设置。'

        如果您的视图控制器是从 nib 文件加载的,并且其视图未设置异常,则会引发异常。因此,当您在 IB 中创建视图时,您必须将视图出口连接到您的视图控制器对象(可能 - IB 中的文件所有者)。

        编辑:所以基本上在 IB 中的 nib 文件中,您需要执行以下操作:
        1.设置文件所有者类型为NextViewController
        2. 将 NextViewController 的 view outlet 连接到一个 View 对象

        【讨论】:

        • 不太确定您的意思。你能指导我在我的 nib 文件中修改的位置和内容吗?干杯。
        【解决方案6】:

        你需要像这样更新你的代码:

         -(void)tableView:(UITableView *)tableView
        didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
        
            if(indexPath.row==0){
        
            NextViewController *nextController = [[NextViewController alloc]
                                                  initWithNibName:@"NextView" bundle:nil];
            [nextController changeItemTable:[arryClientSide
                                             objectAtIndex:indexPath.row]];
            [self.navigationController pushViewController:nextController
                                                 animated:YES];
            }
        else{   }
        }
        

        尝试使用此代码...

        【讨论】:

        • 你的改变是'else'子句吗?
        • 更改后,当您点击一个单元格时,应用程序仍会退出。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多