小编rcw*_*cw3的帖子

在手动构建视图时,如何处理UIViewController中的视图初始化顺序?

我有一个UIViewController,它在loadView中实现了它的视图(即没有nib).根据文档(并通过代码中的确认),loadView以及因此,在第一次访问UIViewController的视图之前,不会调用viewDidLoad.

我有另一个类实例化UIViewController并在引用视图本身之前调用它上面的许多方法.其中许多方法都修改了UIViewController中的视图/子视图.不幸的是,此时未对视图/子视图进行实例化.(我可以很容易地在其他方法调用之前添加对视图的引用,但这需要努力并理解我的UIViewController用户的不可见契约).

如何处理修改视图/子视图的UIViewController上的方法?在我的每个UIViewController方法中,我可以检查视图是否已加载,但您不应该直接调用loadView.我可以把"自我观点"; 在方法中可能确保视图被加载,但这看起来非常h​​ackish(当然导致clang警告).

此外,这不仅仅是一次性的事情,因为显然可以在内存事件期间卸载视图,从而允许这种状态经常发生.

我觉得我错过了一些相当简单的东西,但我找不到它.处理此状态/初始化问题的适当方法是什么?

iphone cocoa-touch objective-c uiviewcontroller ios

4
推荐指数
1
解决办法
754
查看次数

多个控制器和半共享对象之间的所有权和参考模式?

例如,我有窗口(非文档模型) - 它有一个与之关联的控制器.在这个窗口中,我有一个列表和一个添加按钮.单击添加按钮将显示另一个"详细信息"窗口/对话框(带有关联的控制器),允许用户输入详细信息,单击确定,然后将项目传播回原始窗口的列表.显然,我会有一个底层模型对象,它包含这些实体的集合(让我们将单个实体称为实体以供参考).

可以想象,我只有一个主窗口,所以我可能只有一个实体集合.我可以将它藏在主窗口的控制器中 - 但是如何将它传递给细节窗口?我的意思是,我可能不希望传递这个集合 - 难以阅读/维护/多线程.我可以传递一个对父控制器的引用并使用它来访问集合,但这似乎也闻起来.我可以将它存储在appDelegate中,然后通过[[NSApplication sharedApplication]委托]将其作为"全局"变量访问 - 这似乎有点过分,考虑到应用委托与模型没有任何关系.另一个全局变量样式可能是一个选项 - 我可以使Entity类具有用于集合的单例工厂和用于访问集合的类方法.这似乎比appDelegate更大的滥用 - 特别是考虑到Entity对象和所述实体的集合是两个独立的问题.我可以创建一个EntityCollection类,它具有单例工厂方法,然后是对象与集合交互的方法(或者分成真正的工厂类和集合类,以获得更多的OO优点并轻松替换测试对象).如果我使用的是NSDocument模型,我想我可以将它存放在那里,但这与在应用程序委托中存储它没有多大区别(尽管NSDocument本身看起来似乎以某种方式表示模型).

我最近在服务器端花了很多时间,所以我没有必要对付客户端很多,当我有,我只是粗暴强迫解决方案.最后,有十亿种方法可以为这只猫提供皮肤,看起来它们都不是非常干净或漂亮.普遍接受的Cocoa程序员的做法是什么?或者,更好的是,这样做的最佳方式是什么?

cocoa design-patterns objective-c

1
推荐指数
1
解决办法
689
查看次数