[Obj-C++] 21 接尾語の検索およびアラート表示 : hasSuffix, NSAlert

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

TextFieldにペーストしたファイルパスの接尾語として.xlsxが含まれていなければアラート表示するようにしました。いわゆるモーダルダイアログです。

これまで扱ってきたプログラミング言語ではhasSuffixのような便利なメソッドはなかったので少し感動しました。もちろんhasPrefixで接頭語も検索できます。

先日、筋悪なコード絡みでボツにしたNSWindowの座標取得が早くも日の目を見ました。アラートの絶対座標設定に使っています。

<case1のみ>

// NSWindowを取得
NSArray *windowsArray = [NSApp orderedWindows];
NSLog(@"windowsArray %@", windowsArray);
NSWindow *currentWindow = [windowsArray objectAtIndex:0];

// NSWindowの絶対座標を取得し、アラートの原点となる左下座標のNSPointを作成
NSRect contentRect = [currentWindow frame];
float x = NSMinX(contentRect);
float y = NSMinY(contentRect);
NSPoint xy = NSMakePoint(x+50, y-150);

switch (rbtn_num){
		case 1:{
			path = [_delegateW getTextBox1];
			BOOL judge = [path hasSuffix:@".xlsx"];

			if (!judge){
				NSAlert *alert = [[NSAlert alloc] init];
				[alert.window setFrameOrigin:xy];
				[alert.window makeKeyAndOrderFront:nil];
				[alert addButtonWithTitle:@"OK"];
				[alert addButtonWithTitle:@"キャンセル"];
				alert.showsSuppressionButton = false;
				alert.messageText = @"This input is invalid!";
				// alert.informativeText = @"詳細情報";
				alert.alertStyle = NSAlertStyleWarning;
				[alert runModal];

				// 今回はOK, キャンセルで閉じるだけ
				// 処理を変える場合は下記参照
				// NSModalResponse ret = [alert runModal];
				// switch (ret) {
				// 	case NSAlertFirstButtonReturn:
				// 		NSLog(@"OK");
				// 		NSLog(@"suppressionButton:%ld", alert.suppressionButton.state);
				// 		break;
				// 	case NSAlertSecondButtonReturn:
				// 		NSLog(@"キャンセル");
				// 		break;
				// 	default:
				// 		break;
				// }

				break;

			}

			convert = [[Convert alloc] init];
			result = [convert ConvertFunc:path number:rbtn_num];
			[textview setString:result];
			break;
		}

参考サイト