わかりました。iPadに外部画面を実装する正しい方法を誤解した可能性があると思います。それは私に多くの頭痛の種を引き起こしています。 これは長い投稿なので、私がやろうとしているのは、ビューを作成してVGA経由で外部画面に送信し、それが終わったら画面を削除することです。カウントの保持の問題が発生しているため、機能させることができません。
私はいつでもiPadに呼び出すことができるViewControllerを持っています。このビューが読み込まれると(Keynoteプレゼンテーションと同様にリモートです)、外部画面を確認してから、ウィンドウを作成し、追加のモニターにビューを追加します。
私のipadViewController.h
<-iPadにとどまるビュー
私は持っています
@interface ipadViewController : UIViewController {
PresentationViewController *presentationView;
UIScreen *externalScreen;
UIWindow *externalWindow;
}
@property (nonatomic, retain) UIScreen *externalScreen;
@property (nonatomic, retain) UIWindow *externalWindow;
@property (nonatomic, retain) PresentationViewController *presentationView;
@end
(もっとありますが、それは外部画面のものです)。
でipadViewController.m
:
@synthesize externalScreen;
@synthesize externalWindow;
@synthesize presentationView;
したがって、ビューが読み込まれるときに、いくつかのことを実行しようとします。
外部画面を取得する(可能な場合)を作成しpresentationViewController
、追加の画面に追加します
- (void)viewDidLoad {
[super viewDidLoad];
[self getExternalScreen];
[self createPresentationAndSendToWindow];
}
画面を取得するには、次のようにしますgetExternalScreen:
。
if ([[UIScreen screens] count] > 1)
{
for (UIScreen *currentScreen in [UIScreen screens])
{
if (currentScreen != [UIScreen mainScreen])
self.externalScreen = [currentScreen autorelease];
}
}
それにビューを送信するにはcreatePresentationAndSendToWindow:
:
if (self.presentationPath == nil) return;
PresentationViewController *viewController = [[PresentationViewController alloc] initWithNibName:@"CanvasPresentation" bundle:nil];
self.presentationView = viewController;
[viewController release];
if (self.externalWindow == nil)
{
CGRect externalBounds = [self.externalScreen bounds];
self.externalWindow = [[[UIWindow alloc] initWithFrame:externalBounds] autorelease];
[self.externalWindow addSubview:self.presentationView.view];
self.externalWindow.screen = self.externalScreen;
[self.externalWindow makeKeyAndVisible];
}
私は次のdealloc
ようにクリーンアップしようとします:
[presentationView release];
[externalScreen release];
//[externalWindow release]; <- that would crash
私が抱えている問題は、remoteViewController
(モーダルです)を閉じると、リリース後にexternalScreen
保持カウント= 1になり、externalWindowの保持カウント=2になることです。
externalWindow release
リリースしないと、原因のクラッシュは消えますpresentationView
(しかし、リークしてpresentationView
います。