Получить путь для NSFileWrapper

Учитывая объект NSFileWrapper (для файла или каталога), есть ли способ получить полный путь для расположения фактического файла на диске?

[fileWrapper filename] возвращает только имя файла, а не путь, так что это не то, что я ищу.

2 ответа

Решение

Нет, нет способа получить полный путь от NSFileWrapper,

Если вы используете 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)
Другие вопросы по тегам