3

我对 UIImagePickerControllerSourceTypeCamera 有一个奇怪的问题。我的应用程序提供了从图库中选择图片或使用相机拍照的选项。如果我选择画廊,我会选择一张照片并返回我的视图,没有问题。

但是,当使用 UIImagePickerControllerSourceTypeCamera 时,当我返回它时,它似乎对我的视图做了一些奇怪的事情。

例如,我在 viewDidLoad 方法中有一堆代码,如果它需要基于某些因素移动视图中的一些对象 - 当我退出 UIImagePickerControllerSourceTypeCamera 时会调用此代码,但当我退出图库时不会调用此代码。

这是预期的吗?

4

1 回答 1

3

我认为你的观点被didReceiveMemoryWarning资源密集型相机所触发的东西所抛弃。您可以强制模拟器在没有摄像头的情况下生成内存警告来测试这个理论。

一般来说,viewDidLoad 需要能够处理多次调用。这不是一种init方法。如果self.view设置为 nil 并且稍后需要重新创建视图,则会再次调用它。可能有一个更合适的位置来放置导致问题的任何代码,但是这些init方法很棘手,因为指定的初始化程序被 nib 加载绕过了。

当从 nib 加载时,会调用该类initWithCoder,它会绕过整个 init 过程,因为假定去归档是在吸入已经初始化的对象。因此,重新初始化对象可能会破坏一些东西,比如调用 loadView ,它本质上与 nib 包含的内容冲突,因为它应该以编程方式构造 nib 中已有的内容。您仍然可以像往常一样覆盖 initWithCoder,只要您通过 args 来满足super您的要求,但是如果您使用指定的初始化程序初始化对象,则不会调用它。当然,如果您需要担心,您可以将要在两者中执行的所有代码放入一个方法中,该方法可以从两个重写的方法中调用。

于 2010-01-24T19:27:22.067 回答