Как отобразить окно в плагине, когда подключаемое приложение Какао предоставляет только API C ++? - PullRequest
2 голосов
/ 05 ноября 2010

Я разрабатываю плагин для FileMaker Pro 11 Advanced на Mac, используя его плагин C ++ API. Я хочу показать NSWindow на экране, который загружен через файл XIB, но я не могу отобразить окно, не задав для свойства «Видимый при запуске» окна значение YES в файле XIB.

Я пытаюсь:

[window makeKeyAndOrderFront:NSApp];

Проблема в том, что это не заставляет окно появляться на экране. Я также попробовал:

[window makeKeyAndOrderFront:windowController];

и

[window makeKeyAndOrderFront:window];

и

[window makeKeyAndOrderFront:nil];

Я очень плохо знаком с Objective-C и Cocoa, поэтому я все еще изучаю базовые вещи о создании графических интерфейсов на Mac. Однако я не уверен, что мой оконный контроллер, мое окно или даже NSApp «подключены» к FileMaker Pro; то есть я не знаю, совпадает ли мой NSApp с FileMaker NSApp. Это глупый вопрос?

Как NSWindowController успешно отображает окно на экране, когда для параметра «Видимый при запуске» установлено значение ДА? Я не хочу продолжать использовать это свойство только для того, чтобы вывести мое окно на экран!

Ответы [ 2 ]

0 голосов
/ 17 октября 2012

Что такое «окно» в вашем примере?Я ожидаю, что этот код будет использовать

[windowController.window makeKeyAndOrderFront: nil]

или

[self.window makeKeyAndOrderFront: nil];

(или NSApp вместо NIL или что-то еще, отправитель здесь не имеет значения, он игнорируется, толькополучатель актуален).NSWindowController лениво загружает свое окно, поэтому XIB не загружается, пока вы не вызовете -window.Вы не имеете прямого доступа к _window (или к self -> _ window), к переменной экземпляра, верно?Потому что это будет просто NIL до тех пор, пока вы в первый раз не вызовете -window.

Кроме того, как уже упоминал Ян, FileMaker очень, очень старый и, скорее всего, еще не обновлен для использования Какао в качестве пользовательского интерфейса.,Вы можете смешивать Carbon (в котором FileMaker, вероятно, все еще написан) и Cocoa, но есть много мелких проблем и ошибок, поэтому я не рекомендую это делать, особенно если вы новичок в Cocoa.Вам нужно изучить как углерод, так и какао, чтобы решить многие проблемы, которые вы делаете.

Кстати, не используйте NSApp.Используйте [NSApplication sharedApplication], чтобы убедиться, что вы получите объект NSApplication обратно.NSApp может быть NIL, если вы вызываете его раньше, чем кто-либо когда-либо вызывал [NSApplication sharedApplication].И снова, как упомянул Ян, для интеграции Carbon / Cocoa вам, возможно, придется вызвать функцию NSApplicationLoad (), чтобы Carbon знал, что теперь вы создадите несколько окон Cocoa внутри нее.Это все равно не поможет вам с панелью меню, которая по-прежнему будет Carbon.

Предлагает ли FileMaker SDK условия для создания окон?Возможно, вам придется смириться с тем, что вы будете писать свой код для своего C ++ SDK.В качестве альтернативы, создайте отдельное приложение Cocoa, которое создает ваше окно и выполняет работу, и создайте крошечный плагин C ++, который просто запускает это приложение, передает ему данные (например, записывая его в файл или отправляя AppleEvent на ваш компьютер).приложением или отправкой информации через Распределенные объекты), а затем в какой-то момент знает, как извлечь данные из вашего приложения и передать их обратно в FileMaker.

0 голосов
/ 30 января 2011

Итак, вы пытаетесь отобразить окно Какао из приложения Carbon.Вы сначала позвонили NSApplicationLoad?См. CarbonCocoaIntegration.pdf на веб-сайте Apple для получения дополнительной информации.

...