iOS 开发中 NavigationController经常出现的问题原因分析

这篇文章主要介绍了iOS 开发中 NavigationController经常出现的问题原因分析的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下

情况一:


MyViewController *sampleViewController = [[[MyViewController alloc]initWithXXX] autorelease]; 
[self.navigationController pushViewController: sampleViewController animated:true];

BUG:界面无反应

分析可能出错的原因:

1:self.navigationController为nil,空指针执行pushViewController直接跳过,接着sampleViewController会释放掉,所以界面会无反应。

self.navigationController为神马会空呢?navigationController是UIViewController父类继承来的属性,不是随便都能用的,除非你当前viewController是被nav push进来的,或者用xib/代码做成navigationcontroller的root了,cocoa的代码应该是给赋值了。(题外话,我很多界面就是局部用了某个ViewController,这种情况该viewController的nav为空,如果要正确使用,可以从app取,可以自己赋值,可以整体界面取。。。想咋取都行)

2、self.navigationController为nil,界面挂了

如果你sampleViewController用到了网络异步请求,在initWithXXX的时候会去取数,那么你10有89会挂掉。

原因分析:大家网络请求,经常如下:


TwitterClient *twitterClient = [[TwitterClient alloc] initWithTarget:self action:@selector(XXXReceive:obj:)];
[twitterClient getXXX:param];

恭喜你,这种情况不管是不是navigationController为空,你程序极容易挂掉,原因就是因为网络请求我们都会用异步方式来拉取数据,当数据回来之后,会回调到本类的XXXReceive:obj方法,但是如果界面退出了,数据才收到将如何?那就是不是空指针调用了,TwitterClient里纪录的需要回调的内存地址上神马情况都有可能是,回调。。杯具了

解决办法:twitterClient做成成员,在析构的时候该咋收拾twitterClient的就咋收拾一下吧

3、self.navigationController为nil,界面挂了

和上文一样twitterClient成员了,dealloc也清理了现场,还是会挂

原因分析:异步的问题,twitterClient已经取到数据,但是sampleViewController已经被释放了,but dealloc根本没来得及进来。。。

解决办法,1:确保nav正确,2:尽量在界面viewDidLoad的时候网络请求数据,在dispear的时候清理网络。

情况二:

reason: 'Pushing a navigation controller is not supported'

报上面的错误,原因是:

大家知道,可以将ViewController push到一个 NavigationController中。就像是入栈操作!

将一个NavigationController再次push到NavigationController中时,报错,出現了

reason: 'Pushing a navigation controller is not supported'的错误。

应该是,NavigationController不支持push进來的对象是NavigationController吧。

修改方法是:将要进入的页面不去继承UINavigationController

情况三:

有时候项目里会有一种消息推送, 就是弹出提示用户消息, 而消息中带有链接, 当你点击连接时不能跳转,这种情况是因为你的self.navigationController = nil 造成的,因为你弹窗的那个控制器没有用UINavigationController包装

以上所述是小编给大家介绍的iOS 开发中 NavigationController经常出现的问题原因分析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对得得之家网站的支持!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

本文主要介绍了IOS 性能优化中离屏渲染的资料,提供了几种方法讲解了优化,有需要的小伙伴可以参考下
一般有Reachability和AFNetworking监测两种方式,都是第三方的框架,下文逐一详细给大家讲解,感兴趣的朋友一起看看吧
这篇文章主要介绍了IOS 陀螺仪开发实例详解的相关资料,介绍了螺旋仪参数意义及CoreMotion框架,需要的朋友可以参考下
这篇文章主要介绍了IOS 实现摇一摇的操作的相关资料,需要的朋友可以参考下
这篇文章主要给大家总结了iOS实现渐变颜色的三种方法,分别是利用CAGradientLayer实现渐变、Core Graphics相关方法实现渐变以及用CAShapeLayer作为layer的mask属性实现,大家可以根据自己的需要选择使用,下面来一起看看吧。
这篇文章主要介绍了cmake ios终端下执行提示错误 iOS version not found, tested: [5.0;5.1;6.0;6.1;7.0;8.3]的解决方案的相关资料,需要的朋友可以参考下