Я работаю над новой версией своего изолированного приложения и удалила все поддерживаемые типы файлов, кроме одного. Когда я запускаю приложение и выбираю Открыть в меню файлов, я могу выбирать и открывать только файлы с расширением типа файла моего приложения. Пока все хорошо.
Теперь у меня есть метод, который объединяет содержимое двух моих документов приложения. С одним открытым документом я вызываю NSOpenPanel, чтобы получить второй файл. В этом случае, однако, я получаю неожиданное поведение, что NSOpenPanel позволяет мне выбирать файлы, которых нет в моем списке типов файлов приложения. Тем не менее, они являются типами файлов, которые может открыть предыдущая версия приложения. Это странно, поскольку я удалил все типы документов из моего файла info.plist, кроме одного.
Конечно, когда я выбираю «запрещенный» файл, я получаю ноль в коде ниже. Но мне не следовало выбирать это в первую очередь. Есть идеи, почему у меня такое неожиданное поведение?
Код для открытия второго файла ниже
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel beginSheetModalForWindow:[self window] completionHandler:^(NSInteger returnCode)
{
if (returnCode == NSOKButton) {
NSArray *filesToOpen = [openPanel URLs];
NSURL *absoluteURL = [filesToOpen objectAtIndex:0];
NSDocumentController *docController = [NSDocumentController sharedDocumentController];
[docController openDocumentWithContentsOfURL:absoluteURL
display:NO
completionHandler:^(NSDocument *document,
BOOL documentWasAlreadyOpen,
NSError *error){
// open document code here...
}];
}
}
Обновление: моя проблема в том, что я не понимаю разницу между CFBundleTypeName и массивом CFBundleTypeExtensions. То, что я сделал, немного сбивает с толку, но здесь идет.
В моей новой версии я установил для моего CFBundleTypeName значение «X», а для CFBundleTypeExtensions - «Y».
В моей старой версии я установил для моего CFBundleTypeName значение «Z», а для CFBundleTypeExtensions - «X».
Когда NSDocumentController создал NSOpenPanel, я мог выбирать только файлы с расширениями "Y", как и ожидалось. Но когда я создал NSOpenPanel и дал ему тип файла «X», я смог выбрать любой файл с расширениями «X» и «Y». Два разных поведения от того, что я думал, были тем же настроенным NSOpenPanel. Что я не знаю, так это то, как NSDocumentController настроил NSOpenPanel, чтобы я не мог выбирать файлы с расширением «X».