[Obj-C++] 16 NSWindowの重複 : 解決手順2

[M1 Mac, Big Sur 11.6.5, clang 13.0.0, no Xcode]

前回の続きです。

AppDelegateファイルを作成以降は以下の流れになります。

1.Drag & Dropを設定しているNSViewクラスのconcludeDragOperationメソッドにDropしたファイルのパスについて処理内容を記述する。
2.NSAppクラスのorderedWindowsメソッドでNSWindowの配列をディスプレイ表示順にて取得する。
3.先頭のNSWindowを選択し、setIsVisibleメソッドで非表示に設定する。
4.[alloc init]で新しいNSWindowを作成する。
5.NSWindow内のTextFieldにファイルパスを入力する。

念のため消費メモリを確認しましたが、特に異常はありませんでした。ただ何らかの弊害が発生する可能性はあります。

コードは以下の通りです。

<該当箇所のみ>

@implementation DragAndDropView

// ドロップ完了後の処理
- (void)concludeDragOperation:(id <NSDraggingInfo>)sender{
    NSPasteboard *pboard = [sender draggingPasteboard];
    NSString *fileURL = [[NSURL URLFromPasteboard:pboard] path];
    NSLog(@"fileURL %@",fileURL);

    // NSAppのWindowをディスプレイ表示順に並べた配列を作成
    NSArray *windowsArray = [NSApp orderedWindows];
    NSLog(@"windowsArray %@", windowsArray);

    // 先頭のWindowを非表示にする(操作しているため、このAppが常に先頭)
    NSWindow *currentWindow = [windowsArray objectAtIndex:0];
    [currentWindow setIsVisible:NO];

    //新たにAppのWindowを作成
    ConvertorWindow *newWindow = [[ConvertorWindow alloc] init];
    [[newWindow autorelease] makeMainWindow];

    // Window内のtextBox1にファイルパスを入力する
    newWindow->textBox1.stringValue = fileURL;
}
@end

参考サイト