0

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

Несколько деталей: - От моего основного приложения, я загрузка «загружаемый» (узелок, который состоит из NSWindowController) - Оба проекта (основное приложение и «плагин») являются ARC поддержкой

В моем плагине коде, у меня есть метод пользовательской инициализации:

- (id)initWithAPI:(id)api 
{ 
    pluginWindowController* newPluginWindowController = [super initWithWindowNibName:@"PluginWindow"]; 

    if (newPluginWindowController) 
    { 
     [newPluginWindowController setAPI:api]; 
    } 

    return newPluginWindowController; 

} 

Это как API объявлен:

@property (unsafe_unretained) id API; 

Теперь вот загвоздка:

  • Я инициализируется с помощью initWithAPI: и API создается.
  • Когда я тестирую значение API в - (void)windowDidLoad:, он все еще отображается нормально.
  • Однако: при попытке сделать то же самое из другого метода (на самом деле IBAction, вызванное нажатием кнопки в окне моего плагина) ... пытается получить [self API] вызывает ошибку EXC_BAD_ACCESS.

Что я делаю неправильно? Есть идеи?

ответ

2

Либо объявить свойство, как weak, если вы хотите, чтобы он автоматически устанавливается в nil когда умирает объект, или как strong, если вы хотите сохранить объект живой (strong, вероятно, что вы хотите).

unsafe_unretained приведет к оборванных указатель, если объект освобождаться (именно поэтому его называют «небезопасными» ..)