今天犯了一个逻辑上的错误,点击一个列表控制器进入内容控制器(内容控制器是用alloc方式创建的,然后自定义了一个视图,添加到该内容控制器上,在自定义视图上添加了一个按钮,点击按钮的处理时间是从内容控制器进入另一个控制器界面,因为按钮是在视图类中定义的,故需在视图类的按钮点击事件的处理函数中创建内容控制器类(用alloc方式创建的),然后调用内容控制器类的方法(该方法的核心代码为:[self.navigationControllerpushViewController:apply animated:YES]; apply为要进入的控制器对象)。但是在点击按钮后无法进入apply控制器对象,why????
请教同事后终于明白,这里犯了严重的逻辑上的的错误!!首先自定义视图已经位于内容控制器上,然后再在视图类中的按钮点击事件的处理函数中创建内容控制器类对象A,则A对象跟正在显示的内容控制器类对象并不是一个对象,则apply对象并没有进入正在显示的内容控制器的导航栈中,故点击按钮不会进入apply对象的控制器中。
解决办法:
可为内容控制器类添加一个单例的类方法,每次在需要创建内容控制器类对象时,都调用该单例类方法,保持只有一个控制器类对象,这样apply对象进入的就是正在显示的内容控制器类对象的导航栈(因为只有一个内容控制器类)。
后来验证这样也不能解决问题,这样在点击列表控制器进入内容控制器时,也是调用该单例类方法,当已经创建了内容控制器再点击列表控制器进入内容控制器时,内容控制器类不会再执行初始化方法(初始化方法执行一些内容信息的加载工作),这样内容控制器中的信息得不到更新还是以前的信息。
后来只好将按钮填在了内容控制器的导航条上。
如果还是用上面的方法,在点击列表控制器进入内容控制器时,用alloc 创建内容控制器类,而在视图类点击按钮的处理方法中用单例的类方法来得到内容控制器类。这样做行不行呢???我考虑着行,但没试验,不知道有没有什么没想到的地方??