2013-11-15 44 views
0

我有PreviewControllerUIViewController它用於全屏顯示文檔,它是UINavigationViewController的一部分。 也是代表UISplitViewController在調用委託方法之前釋放UIViewController

當它被推動時,它隱藏了masterViewUISplitViewController。 (方法1 - 3 - 2被稱爲)

當它消失(通過按「後退」按鈕),它顯示masterViewUISplitViewController。 (方法4 - 2被稱爲)

但有一種方法可以強制關閉PreviewController。在這種情況下,只調用方法4並在UISplitViewController可以發送消息並調用方法2之前取消分配PreviewController

如何解決此問題?有沒有辦法強制UISplitViewController調用它的委託方法?或者我可以在方法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] 
+0

您的PreviewController實例在哪裏創建?你可以發佈代碼嗎? – Leijonien

+0

在問題部分添加了此信息。 – GxocT

回答

1

您目前沒有對您的PreviewController實例持有任何強引用。通過使用

@property (nonatomic, strong) PreviewController *previewVC; 

,然後創建實例: 應該足以在你的界面添加強大的類屬性

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

這保證了PreviewController不會被釋放,而您的視圖控制器活着(除非你自己釋放它)。

+0

你幫我一部分。 PreviewVC並未解除分配,但委託方法仍未調用。 :( – GxocT

+0

我找到了解決方案,我在方法#4中添加了splitViewController.delegate = self;在其他UIViewController中更改了splitViewController的委託,這就是爲什麼它沒有被調用:( – GxocT

相關問題