私は最近、一部のコンピューターで、フルスクリーン ウィンドウの作成が、提供するNSBorderlessWindowMask
代わりにプライマリ スクリーンに表示されるという問題に遭遇しました。screen.frame
基本的なウィンドウ作成コードを使用して新しい Cocoa プログラムを作成すると、フルスクリーン ウィンドウが正しく作成されます。ただし、元のプログラムのコードを作業用の最小限のプログラムのコードに縮小しても、依然として正しくない結果が生じます。
その後、どこかに 1 文字を追加してバンドル ID を変更するとcom.blah.Program
、com.blah.tProgram
プログラムは正常に動作します。元のバンドル ID に戻すと、プログラムが正しく動作しなくなります。
のすべてのコンテンツを削除~/Library/Developer/Xcode/
し、 に設定が保存されていないことを確認defaults delete [bundle identifier]
し、 内のアプリ名を含むものをすべて削除~/Library/
し、コンピューターを再起動しましたが、動作に変化はありませんでした。
要約すると、問題のあるアプリケーションがありました。コードを作業用の最小限のコードに減らしましたが、まだ問題がありました。バンドル ID を変更したところ、プログラムが正しく動作するようになりました。バンドル ID を元に戻したら、プログラムが正しく動作しなくなりました。
問題の最小限のコードはAppDelegate.m
、セレクターにバインドされた単一のボタンを持つ新しい Cocoa プログラムのデフォルトの代わりに、次のとおりです。pushbutton:
#import "AppDelegate.h"
@interface AppDelegate () {
NSWindow *_fullScreenWindow;
}
@property (weak) IBOutlet NSWindow *window;
@end
@implementation AppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
// Insert code here to initialize your application
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
// Insert code here to tear down your application
}
- (IBAction)pushbutton:(id)sender {
[self fullScreenWindow];
}
- (void)fullScreenWindow {
NSArray *screens = [NSScreen screens];
NSScreen *screen = screens[1];
NSRect screenFrame = [screen frame];
NSRect frame = NSMakeRect(0,0,screenFrame.size.width,screenFrame.size.height);
NSWindow *window = [[NSWindow alloc] initWithContentRect:screenFrame
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:YES];
[window orderFront:nil];
[window setFrame:screenFrame display:YES animate:NO];
_fullScreenWindow = window;
}
@end
NSZeroRect
forを使用してバンドル識別子に関係なく問題を解決できるため、コードは正直に無関係ですが、バンドル識別子initWithContentRect:
が指定されたコードでこの問題を引き起こしている理由を知りたいので、元の問題がどこかにあったかどうかを判断できます私のより大きなコード、Cocoa API の何か、または完全に外部の何か。
システムに何かが保存される可能性のある場所は他にありますか? 他のプログラムが、選択したバンドル識別子を持つプログラムの動作を変更している可能性がありますか?もしそうなら、どうすればこのプログラムを見つけることができますか? 他のアイデアはありますか?
関連するかどうかはわかりませんが、これは OS X 10.10 をターゲットとする Yosemite 10.10.2 上の XCode 6.1.1 にあります。