Получить путь для NSFileWrapper
Учитывая объект NSFileWrapper (для файла или каталога), есть ли способ получить полный путь для расположения фактического файла на диске?
[fileWrapper filename]
возвращает только имя файла, а не путь, так что это не то, что я ищу.
2 ответа
Если вы используете NSDocument
Вы можете получить путь к обычным оберткам файлов с небольшим взломом.
Сначала создайте NSFileWrapper
создайте подкласс и перегрузите методы обычного файла, которые получают URL, чтобы сохранить его копию.
@implementation RMFileWrapper
- (id) initWithURL:(NSURL *)url options:(NSFileWrapperReadingOptions)options error:(NSError *__autoreleasing *)outError {
if (self = [super initWithURL:url options:options error:outError]) {
self.originalURL = url;
}
return self;
}
- (BOOL) readFromURL:(NSURL *)url options:(NSFileWrapperReadingOptions)options error:(NSError *__autoreleasing *)outError {
BOOL successful = [super readFromURL:url options:options error:outError];
if (successful) {
self.originalURL = url;
}
return successful;
}
@end
Затем добавьте это NSFileWrapper
категория:
@implementation NSFileWrapper(bestURLWithDocument)
- (NSURL*) bestURLInDocument:(SBDocument*)document {
if (document.fileURL && self.filename) {
NSString* path = [document.fileURL.path stringByAppendingPathComponent:self.filename];
return [NSURL fileURLWithPath:path];
} else if ([self isKindOfClass:[RMFileWrapper class]]) {
RMFileWrapper *fileWrapper = (RMFileWrapper*) self;
return fileWrapper.originalURL;
}
return nil;
}
@end
bestURLInDocument:
вернет URL-адрес узла файловой системы, если он доступен, или исходный URL-адрес файла, если нет.
Приведенный выше код предполагает, что вы не вкладываете файлы каталогов в каталог.
Вы можете добавить компоненты пути к UIDocument fileURL.
Swift 5.2
document.fileURL.appendingPathComponent("MyFolder", isDirectory: true).appendingPathComponent("MyImage.png", isDirectory: false)