Похоже, вам нужно прочитать Руководство по программированию управления памятью .
Здесь происходит то, что ваша переменная fromURL
является иваром (по крайней мере, я предполагаю, что это ивар, вы могли бы вместо этого сделать его глобальной переменной).Вы назначаете это в своем методе.Но вы не имеете дело с управлением памятью, поэтому, когда управление возвращается в цикл выполнения и пул автоматического выпуска очищается, ваш fromURL
ivar в конечном итоге указывает на освобожденный объект.Вы должны сохранить и отпустить по мере необходимости.Для этого конкретного метода я мог бы использовать
if ([openDlg runModal == NSOKButton)
{
[fromURL release];
fromURL = [[openDlg URL] retain];
}
И не забудьте также высвободить fromURL
в вашем методе -dealloc
.
Это можно немного упростить, если вы определитесобственность для вашего fromURL
, как в
@property (nonatomic, retain) NSURL *fromURL;
Таким образом, вы можете использовать
self.fromURL = [openDlg URL];
и не беспокоиться о сохранении / освобождении, за исключением -dealloc
, где вам все еще нужно[fromURL release]