2012-04-28 1 views
0

Я понятия не имею, почему, но всякий раз, когда я делаю простой:Window setContentView Crash?

[_window setContentView:newView]; 

я получаю аварию 'GdB.

У меня есть два метода: «enterFullscreen», «exitFullscreen», где _window - это мой основной NSWindow.

NSView *oldView; 

- (void)enterFullScreen:(NSView*)newView 
{ 
    oldView = [[_window contentView] view]; 
    [_window setContentView:newView]; 
} 

- (void)exitFullscreen:(NSView*)newView 
{ 
    [_window setContentView:oldView]; 
} 

Эти 2 метода связаны с 2 кнопками Push с IBAction. Всякий раз, когда я нажимаю кнопку, взгляды меняются, но после этого происходит крах.

Есть ли у кого-нибудь идеи, почему?

Спасибо всем

EDIT: Это код, теперь у меня есть:

-(void)enterFullscreen(NSView*)newView 
{ 
    oldView = [[NSView alloc] init]; 
    oldView = [_window contentView]; 
    [newView removeFromSuperview]; 
    [_window setContentView:newView]; 
} 

- (void)exitFullscreen:(NSView*)newView 
{ 
    [_window setContentView:oldView]; 
} 

Ввод полноэкранный режим работает нормально, но когда я призываю exitFullscreen, окно гаснет, а затем приводит к следующим авария:

crash image

Любая помощь очень ценится!

+0

Нет такой вещи, как «авария gdb». GDB - отладчик. Единственный способ, которым вы столкнулись с сбоем GDB, - это то, что сам отладчик разбился, - и тогда вы не будете смотреть на него в Xcode. –

ответ

2

Код как отправленный не компилируется. Есть недостающие двоеточия, или я не понимаю сигнатуры метода каким-то другим способом.

Во-вторых, [window contentView] возвращает NSView. Затем вы вызываете метод -view. Что это? NSView не имеет такого метода. И из контекста вы хотите сохранить фактическое представление старого контента в oldView, так почему вы вызываете что-то за пределами [window contentView]?

В любом случае, окно сохраняет свой контент. Однако, когда вы меняете новый контент, он выпускает старый и сохраняет новый. Если вы используете ARC, а oldView не __strong, или если вы не используете ARC, тогда старый контентный контент не сохраняется ничем и освобождается.

Если это не объясняет это, вам необходимо опубликовать точное сообщение об исключении, сбое или ошибке и показать, где это происходит.

+0

Извинения, если я пропущу двоеточие, я переписал код, потому что мой гораздо больше. Если я пойму вас, изменение этого параметра не будет выполнено, если вы измените значение unsafe_unreded до _strong на представлениях. – Cristian

+0

ARC говорит, что он не позволяет __strong? – Cristian

+0

Где он это говорит? Что вы пробовали? –

0

setContentView; отправьте сообщение автореферата. Этот метод вызывает публикацию старого содержимого; если вы планируете его повторно использовать, обязательно сохраните его перед отправкой этого сообщения и, при необходимости, отпустите его, добавив его в другой объект NSWindow или NSView. Попробуйте что-нибудь вроде следующего.

[newView retain]; 
    [oldView removeFromSuperview]; 
    [_window setContentView:newView]; 
    [newView release]; 
+0

спасибо за ваш ответ, но в моем проекте используется ARC, и поэтому я не могу сохранить – Cristian