#objective-c #exception #macos-catalina #xcode12 #save-as
Вопрос:
У наших пользователей возникает исключение со следующим сценарием:
- Сохраните файл под произвольным именем, например «test1».
- Откройте диалоговое окно сохранить, чтобы сохранить снова (по умолчанию в диалоговом окне теперь предлагается «тест1»).
- Нажмите «Сохранить», а затем «Заменить», чтобы перезаписать существующий файл.
Результат: исключение.
Если непосредственно перед шагом 3 пользователь нажимает на файл в окне поиска диалогового окна (имя «test1» остается) — исключений нет.
Я нашел упоминание об этой проблеме здесь и попытался воспользоваться данным советом — однако это не помогло.
Вот сокращение моего кода:
#define kMaxPathLength 1023
[self setDialogResult:[dialog runModal]];
if ([self dialogResult] == NSOKButton)
{
char pathBuffer[kMaxPathLength];
@try{
NSString* pathcopy = [[dialog URL] path]; // <== Causes the exception
[pathcopy getCString:pathBuffer maxLength:kMaxPathLength encoding: NSUTF8StringEncoding];
}
@catch(NSException* e){
<breakpoint>
}
}
Строка с замечанием вызывает исключение:
ROSP: sandbox extension failure: nil result or wrong class type ((null)) for finalURL
Примечание: упомянутая отмеченная строка и строка ниже представляют собой разбивку использованного исходного утверждения:
[[[dialog URL] path] getCString:pathBuffer maxLength:kMaxPathLength encoding:NSUTF8StringEncoding];
В котором также происходит исключение.
Используя Xcode 12, Каталина.
Есть какие-нибудь советы, как избежать исключения?
Комментарии:
1. Можно ли воспроизвести проблему в небольшом тестовом проекте?
Ответ №1:
Эта ошибка была в конечном итоге решена (фактически устранена) путем явного указания расширения файла в предлагаемом имени для диалогового окна Сохранить как. Ошибка возникает при указании только базового имени (без расширения).