Хорошо, есть пара проблем с вашим кодом:
Подпись метода имеет конечную точку с запятой
(void)scannerDevice:(ICScannerDevice*)scanner didCompleteScanWithError:
(NSError*)error;
РЕДАКТИРОВАТЬ : Per @omz и @Rudy Velthuis, конечная точка с запятой в сигнатуре метода реализации допускается Objective-C. Таким образом, вы можете игнорировать эту «проблему».
Вы должны использовать экземпляр класса для получения дескриптора для сохранения панели
NSSavePanel * savePanel = [NSSavePanel savePanel];
Вы должны проверить результат запуска панели сохранения модально
if ([savePanel runModal] == NSOKButton) {
//...
}
* Вы создаете экземпляр NSString * и пропускаете его, совершенно не нужно *
NSMutable * saveString = [NSMutableString stringWithString:
[[savePopup URL] absoluteString]];
Как только вы исправите проблемы, описанные выше, вы захотите удалить две линии освобождения, поскольку объекты теперь будут автоматически освобождены. Обратите внимание, что обычно вы все равно хотите вызывать release в своем коде, а не dealloc .