如何处理由于内存不足而导致页面卸载的情况

发布于 2024-12-07 18:19:31 字数 730 浏览 0 评论 0原文

//In App Delegate
UserProfileTableViewController *uptvc = [[UserProfileTableViewController alloc]init];
UITabBarItem *tempTabBarItem4 = [[UITabBarItem alloc]initWithTitle:@"Fans" image:nil tag:FANSTAB_INDEX];

//I am setting the user id information here directly in app delegate
uptvc.userId = [[UserStockInfo sharedUserStockInfo]getUserId];
UINavigationController *navconUptvc = [[UINavigationController alloc]initWithRootViewController:uptvc];

当我的 UserProfileTableViewController 由于内存不足而被卸载时(可能是由于在我的应用程序中使用相机功能),就会出现问题。该页面将无法正确加载,因为它缺少从应用程序委托传入的“userId”信息(如上所示)。我无法直接在 UserProfileTableViewController 中设置此 userId 信息(在 view did load 方法中),因为其他页面在将页面推送到其堆栈时可能会传递不同的 userId。

关于如何解决这个问题有什么建议吗?

//In App Delegate
UserProfileTableViewController *uptvc = [[UserProfileTableViewController alloc]init];
UITabBarItem *tempTabBarItem4 = [[UITabBarItem alloc]initWithTitle:@"Fans" image:nil tag:FANSTAB_INDEX];

//I am setting the user id information here directly in app delegate
uptvc.userId = [[UserStockInfo sharedUserStockInfo]getUserId];
UINavigationController *navconUptvc = [[UINavigationController alloc]initWithRootViewController:uptvc];

The problem arises when my UserProfileTableViewController gets unloaded due to low memory (might be due to using the camera feature in my app). The page will fail to load properly as it is missing the 'userId' information passed in from the app delegate (as seen above). I am unable to set this userId information directly in the UserProfileTableViewController (in view did load method) as other pages might pass a different userId when pushing the page onto their stack.

Any advise on how I can resolve this issue?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

゛时过境迁 2024-12-14 18:19:31

首先,您应该将 UserProfileTableViewController 对象保存到应用程序委托的 ivar 中(因为您在那里分配了它)。其次,让应用程序委托将该 userId 提供给控制器。第三,如果导航控制器从界面中删除/释放,那么即使内存不足,您的 uptvc 也不应该被释放。
视图控制器维护控制器的完整层次结构,即使内存不足,删除的也是视图以及您告诉它们删除的任何内容。

您肯定也希望将 UINavigationController 保留在 AppDelegate 的 ivar 中。

First off, you should keep your UserProfileTableViewController object into an ivar of the app delegate (since you allocate it there). Second, make the app delegate provide that userId to the controller. Third, if the navigation controller is removed from the interface/deallocated, then even with low memory your uptvc should not be deallocated either.
View controllers maintain the full hierarchy of controllers, even when running out of memory, what's deleted are views, and anything you tell them to remove.

You most certainly want to keep the UINavigationController in an ivar of the AppDelegate as well.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文