2016-11-30 2 views
0

Моя цель - расположить NSWindow относительно другого NSWindow, чтобы при перемещении родителя ребенок перемещался вместе с ним.Добавлен NSWindow как дочерний элемент другого окна, но не сохраняется

Когда я трюк с отладчиком, я вижу, что отношения родительского контроля NSWindow устанавливаются правильно. Однако в более поздней части моего кода тот же NSWindow возвращает nil, когда я пытаюсь извлечь родителя. Я решил, что только явный вызов removeChildWindow устранит родительское поведение, если только здесь не происходит что-то еще, например, неправильно настроил родительский учет. Существуют ли другие способы для NSWindow потерять отношения между родителями и детьми?

someFunction(NSWindow* parentWindow) { 
    NSWindow* wnd = [[NSWindow alloc] initWithContentRect:frame 
        styleMask:NSBorderlessWindowMask 
        backing:NSBackingStoreBuffered 
        defer:NO]; 
    [parentWindow addChildWindow:wnd ordered:NSWindowAbove]; 
} 

позже:

anotherFunction(NSWindow* window) { 
    NSWindow* parentWindow = [window parentWindow]; // debugger shows nil 
} 
+0

- «окно» nil? – Willeke

+0

нет, это то же окно, что и wnd ранее – damonkashu

+1

Вам необходимо предоставить дополнительную информацию. Поддерживает ли parentHandle или какой-либо другой объект parentWindow? Являются ли оба окна видимыми в точке, которую вы описываете как «позже» (родительское окно отображается как ноль отладчиком)? – elasticthreads

ответ

0

Кажется, мне позвонили, чтобы изменить видимость окна к ложным:

[wnd setIsVisible:false]; 

И когда я пытался читать снова своего родителя, который заканчивает тем, ноль. Кто бы это догадался, это, похоже, не документировано.

+0

'- [NSWindow setIsVisible:]' - нечетный метод. На самом деле это не основная часть 'NSWindow'. Это часть категории в NSWindow для поддержки скриптов (см. NSWindowScripting.h). Это в основном обертка вокруг заказа окна. Нет другого понятия «видимости» для окон. Во всяком случае, поведение документировано. См. Примечания к выпуску [10.7 AppKit release] (https://developer.apple.com/library/prerelease/content/releasenotes/AppKit/RN-AppKitOlderNotes/index.html#X10_7Notes) в разделе «NSWindow -« Учет заказов для детей ». –