当前位置: 首页 > 编程笔记 >

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

慕铭
2023-03-14
本文向大家介绍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开发中禁止NavigationController的向右滑动返回,包括了IOS开发中禁止NavigationController的向右滑动返回的使用技巧和注意事项,需要的朋友参考一下 IOS开发中禁止NavigationController的向右滑动返回 大家在进行开法的时候细心的朋友会发现,。用后在屏幕的最左边,向右滑动,,你会发现,你的App返回到了上一个页面,这是怎么回事

  • 本文向大家介绍jquery mobile开发常见问题分析,包括了jquery mobile开发常见问题分析的使用技巧和注意事项,需要的朋友参考一下 本文实例分析了jquery mobile开发常见问题。分享给大家供大家参考,具体如下: jquery mobile功能很强大,有了它,不用在程序中,写方法去判断,是什么手机了,完全可以用js来实现各种智能手机的的兼容性。也是因为功能强大,jquery

  • 现象: 运行status命令,看到有send_fail的情况,是什么原因? 答: 有send_fail通常来说不是什么大问题,一般是由于客户端主动关闭连接或者客户端停止接收数据导致的数据发送失败。 send_fail有两种原因 1、调用send接口向客户端发送数据时发现客户端已经断开,则send_fail计数加1。由于是客户端主动断开的,属于正常现象,一般可以忽略。 2、客户端接收缓冲区满(一般是

  • https://github.com/ChenYilong/iOSInterviewQuestions http://draveness.me/guan-yu-xie-ios-wen-ti-de-jie-da/ https://github.com/lzyy/iOS-Developer-Interview-Questions

  • 本文向大家介绍C / C ++中出现分段错误的常见原因列表,包括了C / C ++中出现分段错误的常见原因列表的使用技巧和注意事项,需要的朋友参考一下 分段错误的主要原因是访问未初始化的内存,程序超出范围或试图修改字符串文字。尽管不能保证它们会导致分段错误,但这些可能会导致分段错误。这是分段错误的一些常见原因- 超出范围访问数组 解引用NULL指针 取消引用释放的内存 取消引用未初始化的指针 错误

  • 本文向大家介绍Mongoose经常返回e11000 error的原因分析,包括了Mongoose经常返回e11000 error的原因分析的使用技巧和注意事项,需要的朋友参考一下 发现问题 最近在工作中遇到了一个问题,在定义了schema之后,每一次save都会报E11000,但是db.xxx.find()里面根本就没有冲突的条目,什么情况呢? 问题分析 可能问题出在定义的schema的成员使用了