3

わかりました。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います。

4

2 に答える 2

1

あなたの問題はここにあります:

for (UIScreen *currentScreen in [UIScreen screens])
{
    if (currentScreen != [UIScreen mainScreen])
        self.externalScreen = [currentScreen autorelease];
}

を削除しautoreleaseます。作成または保持していないものをリリースするべきではありません。

于 2010-12-27T03:17:03.133 に答える
0

でexternalViewを自動リリースしています

self.externalWindow = [[[UIWindow alloc] initWithFrame:externalBounds] autorelease];

次に、自動解放ビューを割り当てます

self.externalScreen = [currentScreen autorelease];

自動解放されたビューを解放することはできません。解放しないと、クラッシュします。

于 2010-12-27T02:30:41.417 に答える