1

ОК, вот странная ситуация я столкнулся:Weird проблема с NSWindowController и ARC

  • У меня есть NSWindowController подкласс, окно в myMainWindow.xib и AppDelegate.m вызова NSWindowController вроде этого:

    myWindowController* controller = [[myWindowController alloc] initWithWindowNibName:@"myMainWindow"]; 
    [controller showWindow:self]; 
    

Теперь вот что:

  • Когда ARC установлено на NO, приложение работает нормально, и окна также отображаются нормально.
  • Когда я устанавливаю ARC в YES - сразу после того, как я поставил его (и для JUST 1 перспективе) - он показывает кучу ошибок:

Фев 17 16:35:45 DrKameleons-iMac.local MyApp [16903]: kCGErrorIllegalArgument: _CGSFindSharedWindow: WID 2409 17 февраля 16:35:45 DrKameleons-iMac.local MYAPP [16903]: kCGErrorFailure: Установить точку останова @ CGErrorBreakpoint(), чтобы поймать ошибки, поскольку они вошли. 17 февраля 16:35:45 DrKameleons-iMac.local MYAPP [16903]: kCGErrorIllegalArgument: CGSOrderFrontConditionally: Invalid окно

И окно не не обнаружиться.

Теперь, если я попытаюсь перезапустить приложение (без изменения чего-либо, ARC все еще включен), окно по-прежнему не отображается. Но нет никакой ошибки. : S

Что происходит? Любые идеи о том, как это исправить (и создать окно)?


HINTS:

  • Работает на Mac OS X 10.7.5
  • версия Xcode: 4.5.1

ответ

5

когда ARC включена, то локальный контроллер освобождается сразу после вызова showWindow! но окна отсрочено, то окно не даже там еще - и даже это было, это было бы «контроллер-менее»
Окно не сохраняет свой контроллер :) только наоборот

исправление должен помнить ссылку на контроллер пока ваш AppDelegate не перераспределена/до выхода

@implementation AppDelegate { 
    myWindowController* _controller; 
} 

... 
_controller = [[myWindowController alloc] initWithWindowNibName:@"myMainWindow"]; 
[_controller showWindow:self]; 

ваш код работает без дуги, потому что не выпуск контроллера не происходит, и это просто утечка! ARC действительно добавляет вызов для релиза (поскольку он правильно видит, что контроллер больше не используется)

+0

OK. Ты мой герой. Честно.Вы не можете себе представить, сколько времени от головы до стены ... свяжитесь с вами, вы меня спасли. В самом деле. Спасибо МНОГО, приятель! ;-) –

+1

: D Я столкнулся с той же проблемой, когда впервые использовал ARC. Но теперь я люблю ARC :) –

+0

Ну, это на самом деле мой (настоящий) первый раз с ARC тоже. И дело в том, что я получил работу ARC (наконец), но не первоначальную вещь, которая заставила меня искать помощь ARC ... (http://stackoverflow.com/questions/14919248/objects-not-successfully-released- управление памятью) –