gpt4 book ai didi

ios - 在调用委托(delegate)方法之前释放 UIViewController

转载 作者:行者123 更新时间:2023-11-29 03:29:31 25 4
gpt4 key购买 nike

我有 PreviewController:UIViewController 用于全屏显示文档,它是 UINavigationViewController 的一部分。它也是 UISplitViewController 的代表。

当它被推送时,它会隐藏 UISplitViewControllermasterView。 (调用方法1-3-2)

当它消失时(通过按“后退”按钮),它显示 UISplitViewControllermasterView。 (调用方法4-2)

但是有一种方法可以强制关闭PreviewController。在这种情况下,只有方法 4 被调用并且 PreviewControllerUISplitViewController 可以发送消息和调用方法 2 之前被释放。

我该如何解决这个问题?有没有办法强制 UISplitViewController 调用它的委托(delegate)方法?或者我可以在方法 4 中保留 PreviewController 并在方法 2 中释放它(使用 ARC)吗?

// Method 1
- (void)viewDidLoad
{
[super viewDidLoad];
self.hideMaster = YES;
UISplitViewController *splitViewController = [(AppDelegate *)[[UIApplication sharedApplication] delegate] splitViewController];
splitViewController.delegate = self;
}

// Method 2
- (BOOL)splitViewController:(UISplitViewController *)svc shouldHideViewController:(UIViewController *)vc inOrientation:(UIInterfaceOrientation)orientation
{
return self.hideMaster;
}

// Method 3
- (void)viewWillAppear:(BOOL)animated
{
self.hideMaster = YES;
UISplitViewController *splitViewController = [(AppDelegate *)[[UIApplication sharedApplication] delegate] splitViewController];
[splitViewController.view setNeedsLayout];
[splitViewController willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
}

// Method 4
- (void)viewWillDisappear:(BOOL)animated
{
self.hideMaster = NO;
UISplitViewController *splitViewController = [(AppDelegate *)[[UIApplication sharedApplication] delegate] splitViewController];
[splitViewController.view setNeedsLayout];
[splitViewController willRotateToInterfaceOrientation:self.interfaceOrientation duration:0];
}

// PreviewController is created in UIViewController which belongs to UINavigationController
PreviewController *previewVC = [[PreviewController alloc] initWithNibName:@"PreviewController" bundle:nil];
previewVC.documentURL = url;
[self.navigationController pushViewController:previewVC animated:YES]

最佳答案

您目前没有持有对您的 PreviewController 实例的任何强引用。在您的界面中添加一个强大的类属性就足够了:

@property (nonatomic, strong) PreviewController *previewVC;

然后使用以下方法创建实例:

self.previewVC = [[PreviewController alloc] initWithNibName:@"PreviewController" bundle:nil];

这确保 PreviewController 不会在您的 View Controller 处于事件状态时被释放(除非您自己释放它)。

关于ios - 在调用委托(delegate)方法之前释放 UIViewController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19997713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com