【问题标题】:UIImagePickerController releases my views and controllersUIImagePickerController 释放我的视图和控制器
【发布时间】:2011-09-20 00:08:48
【问题描述】:

我的应用程序中有 5 个选项卡,第五个选项卡是“设置”选项卡,(内部为 UINavigationController),其中一个选项是用户能够编辑个人信息并选择个人资料图片。

在触发 UIImagePickerController(相机模式)并按下取消(我什至不是在谈论拍照)后,一切都返回到原始状态,返回到第一个选项卡,所有视图和控制器都由 iOS 释放和重新创建。用户在设置中更新但未保存的所有内容均已消失。

如何避免这种情况?

注意:我使用的是 UIImagePickerController 的单例实例,没有发现 Instruments 泄漏。当我触发选择器时,“收到内存警告。Level=1”不断出现。

您将成为救生员 - 谢谢!

-- 编辑--

找到了:

我使用的是自定义标签栏 (UIView),因此在设置中,我从该自定义标签栏控制器(在应用程序中主要)呈现 UIImagePickerController 模态(否则选择器将位于其下方)。

我重建了标签栏,所以现在自定义视图只是标准 UITabBar 上的一个子视图,现在我正在调用 [self presentModalViewController:imagePickerController animated:YES];在我的应用程序设置中,它工作得很好。

因此,结论是,当您从另一个控制器而不是“自我”呈现图像时,图像选择器的行为会很奇怪。

【问题讨论】:

  • 请提供您用来显示 UIImagePickerController 的代码

标签: iphone objective-c ios uiimagepickercontroller


【解决方案1】:

您可以做的是为所有字段创建变量,并将用户字段的内容写入这些变量,然后在拍摄或取消图像时,将所有这些字段写回并释放变量。基本上你暂时保存所有字段,然后恢复它们。

【讨论】:

    【解决方案2】:

    听起来您没有正确处理内存警告。在模拟器中,您可以选择“模拟内存警告”来模拟发生的情况。

    长话短说,如果视图没有超级视图,-[UIViewController didReceiveMemoryWarning] 会释放它的视图。有三种简单的方法可以解决这个问题:

    • 覆盖 -didReceiveMemoryWarning 以不执行任何操作。
    • -viewDidDisappear: 中保存状态,应始终在视图卸载之前调用它(除非视图从未出现过)。
    • 在用户编辑状态时保存状态,方法是立即保存(如果您没有取消按钮)或视图控制器中的属性/ivar(如果您只想在用户不单击取消时保存) .

    您可能还想考虑如果您的应用程序被后台处理并被终止会发生什么...

    【讨论】:

    • > 长话短说,如果视图没有父视图,-[UIViewController didReceiveMemoryWarning] 会释放它的视图。我认为这是问题的关键。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-13
    • 2015-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多