单击自定义后退按钮从详细信息页面到上一个tableview崩溃应用程序(仅在iOS8中)

时间:2014-10-04 04:23:37

标签: ios objective-c uitableview ios8

我有一个具有以下结构的应用

首先我在主页上有一个按钮,当我点击它将打开一个新的UITableView并显示"主程序"当用户点击其中任何一个将打开另一个视图控制器并显示所有"子程序"在该用户可以选择每个子程序以查看详细信息。

所有这些都在iOS 7版本之前正常运行。最近我将设备升级到iOS 8(iPad和iPhone),然后我运行相同的代码,当我们从" Sub Program Detail"页面到"子程序"页面应用程序正在崩溃。没有日志消息。只有这个消息 请帮忙,后退按钮工作正常,但之前的tableview控制器无法正常工作。

enter image description here

我试图做仪器然后我得到了以下消息http://postimg.org/image/ytezux0m9/

然后我尝试调试它,但我找不到任何错误(每个值都是正确的)然后我尝试添加" tableview relaod data"到ViewWillAppear()。然后我得到了像这样的崩溃日志

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UISearchDisplayController numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x124e6e7a0'
*** First throw call stack:
(0x1872ee084 0x1978d40e4 0x1872f5094 0x1872f1e48 0x1871f708c 0x18be51d38 0x18bb49480 0x18bb491f4 0x18bb4fe74 0x18ba6d140 0x18ba8e4c8 0x18ba6ce58 0x18ba6ce58 0x18ba8e4c8 0x18ba6ce58 0x18ba6ce58 0x18ba6ce58 0x18ba6c528 0x18ba6c408 0x18ba77ea4 0x18bc5ab18 0x18ba7e77c 0x18bc5a3a4 0x18bc14278 0x18bb24f40 0x18bb24d0c 0x18bb24c8c 0x18ba6d874 0x18b3c5d58 0x18b3c0944 0x18b3c07e8 0x18b3bffe8 0x18b3bfd6c 0x18ba6f790 0x1872a6324 0x1872a55c8 0x1872a3678 0x1871d1664 0x1903135a4 0x18bad64f8 0x1000a4c80 0x197f42a08)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb) 

刚才我跑了然后我在我的日志中得到了这个

-[UITextFieldLabel numberOfSectionsInTableView:]: unrecognized selector sent to instance 0x12fe79f70

更新:

还有一件事,比如当我前进我的if条件为真,当我点击后退按钮时它的geting为false并执行else部分 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section方法代码是这里http://postimg.org/image/kikrbltj1/

1 个答案:

答案 0 :(得分:0)

我认为崩溃的原因是,当您从详细信息中单击后退按钮时,将调用popViewController两次。导航控制器首先弹出"子程序细节"页面,然后立即弹出"子程序"页。在"子计划" viewWillAppear方法,执行setupContainer方法并加载一些FKRSearchBarTableViewController,其中包含要填充的表。

因此,当导航控制器首先弹出"子节目详情"页面,应用程序进入"子程序" page的viewWillAppear方法,其中执行setupContainer并且表同时加载数据," Sub Program"页面已经过时了。"子程序"是dealloc' ed,FKRSearchBarTableViewControllers也是如此,它们正在忙于加载它们的tableViews。这就是为什么消息被发送到dealloc' ed。

您可以将[self setupContainer]中的DAViewController行从viewWillAppear移至viewDidLoad的末尾,然后删除这些行

if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) {
    // Navigation button was pressed. Do some stuff
    [self.navigationController popViewControllerAnimated:YES];
}

来自viewWillDisappear中的THProgramDetailsViewController.m

因为在backBtnClick方法中,已经执行了pop动作。