关于全局变量的一个怪问题

iOS 码拜 7年前 (2015-05-09) 605次浏览 0个评论
 

我的这个app有两个界面,一个主界面,一个设置界面。
我在AppDelegate中定义全局变量来保存设置窗口中设置的一些参数。
我在设置窗口的ViewWillDisappear中,将参数保存到全局变量中,然后在主界面的ViewWillAppear中使用全局参数来控制主界面上一些控件是否显示。但神奇的是,我发现返回主界面的时候,参数并没有更新过来。我需要再次进入一下设置界面,然后再返回来主界面,才可以获取到真正的设置的值。也就是要进入两次设置界面才可以获取到设置的值。
另外,主界面和设置界面是tabViewController来布局的,也就是整个app下方有两个tab项,一个“主界面”,一个“设置”。
请问有谁知道引起这个问题的原因吗?
另外我设置界面的ViewWillDisappear中,读取设置的值,然后弹出对话框来显示,发现已经更新好了全局变量里面的值,然后在主界面的ViewWillAppear中,读取全局变量,然后弹出对话框显示出来,却发现是错误的值,并不是我设置的值,还是原来的老值。

5分
[self.view setneeddispaly];试试
5分
你的这种处理方式不是很好
建议将你说的全局变量建成一个类,然后用单例模式创建全局唯一的对象
之后在你的vc里用kvo监听属性的变化,对应的对ui进行调整,这样比较符合mvc设计思想
5分
是不是用的static变量。
引用 3 楼 zhangao0086 的回复:

是不是用的static变量。

不是用的static变量。
感觉好像是先执行了主窗口的ViewWillAppear,然后再执行的设置窗口的ViewWillDisappear。但我在这两个函数中都加了弹出对话框的窗口,显示是先执行的ViewWillDisappear,然后再执行的主窗口的ViewWillAppear。很郁闷。

引用 4 楼 frequent 的回复:
Quote: 引用 3 楼 zhangao0086 的回复:

是不是用的static变量。

不是用的static变量。
感觉好像是先执行了主窗口的ViewWillAppear,然后再执行的设置窗口的ViewWillDisappear。但我在这两个函数中都加了弹出对话框的窗口,显示是先执行的ViewWillDisappear,然后再执行的主窗口的ViewWillAppear。很郁闷。

后调用 show 的 UIAlertView会最先显示

25分
1. 通过你的描述,你首先要确保在设置的参数更新后,有没有被及时更新到全局的存储对象中
2. 参数的设置是否可以用另外一种方式来驱动保存,如通过一个“保存设置”的按钮 
3. 另外你的全局是使用的什么方式?  单例,NSUserDefault, 还是归档
4. 如果只是这两个界面,是否可以用“通知”的方式 去更新主界面上的设置。viewwillappear 在主界面每次显示时都会执行,在这里做参数的更新是否每次都有必须执行一次?
解决了,我把代码移动到ViewDidAppear后,就可以了。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明关于全局变量的一个怪问题
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!