Попробуйте использовать этот метод вместо:
- (NSArray *)contentsOfDirectoryAtURL:(NSURL *)url includingPropertiesForKeys:(NSArray *)keys options:(NSDirectoryEnumerationOptions)mask error:(NSError **)error
Вы можете просто передать NSURL без необходимости конвертировать его в NSString.Чтобы дать вам пример того, как вы будете его использовать, см. Ниже:
[[NSFileManager defaultManager] contentsOfDirectoryAtURL:filePathURL
includingPropertiesForKeys:[NSArray arrayWithObjects:NSURLNameKey, nil]
options:NSDirectoryEnumerationSkipsHiddenFiles
error:&error];
Я не вижу, как вы настраиваете свою NSOpenPanel, поэтому я также приведу пример того, как настроить это ниже:
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
[openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result){
if (result == NSFileHandlingPanelOKButton) {
NSArray* urls = [openPanel URLs];
NSURL *url = [urls objectAtIndex:0];
if (url != nil) {
// If you want to convert the path to a NSString
self.filePathString = [url path];
// If you want to keep the path as a NSURL
self.filePathURL = url;
}
}
}];
Приведенный выше метод получает путь к файлу или папке после того, как пользователь нажал кнопку OK.Попробуйте и посмотрите, работает ли он.Чтобы уточнить, почему я предложил вам использовать NSURL, вот объяснение, которое дает документация Apple:
Предпочтительный способ указать местоположение файла или каталога - использовать класс NSURL.Хотя в классе NSString есть много методов, связанных с созданием пути, URL-адреса предлагают более надежный способ поиска файлов и каталогов.Для приложений, которые также работают с сетевыми ресурсами, URL-адреса также означают, что вы можете использовать один тип объектов для управления элементами, расположенными в локальной файловой системе или на сетевом сервере.