Как обновить NSFileWrapper?

У меня есть NSFileWrapper с некоторым содержимым. Я хочу сохранить его (writeToURL...:), добавить в него новый контент и сохранить еще раз.

Я хотел бы избежать повторной записи одних и тех же файлов. Так что, если я понял понятно, значит вариант NSFileWrapperWritingAtomic не для меня. Тем более, что я сохраняю файловую обертку в методе

- (BOOL)writeAdditionalContent:(id)content
                         toURL:(NSURL *)absoluteURL
           originalContentsURL:(NSURL *)absoluteOriginalContentsURL
                         error:(NSError *__autoreleasing *)error

(из OSX аналога UIManagedDocument)

и как Apple говорит "не используйте этот параметр вместо -[NSDocument writeToURL:ofType:error:]".

Итак, я не использую эту опцию, но обновление файлов из файловой оболочки (я имею в виду: повторное сохранение) не удается (см. ниже). Любая идея/подсказка?


Вот что я делаю:

1

Я сохраняю его в первый раз с помощью

[self.fileWrapper writeToURL:[absoluteURL URLByAppendingPathComponent:@"attached_files/"]
                     options:0
         originalContentsURL:[absoluteOriginalContentsURL URLByAppendingPathComponent:@"attached_files/"]
                       error:error] ;

Это работает хорошо.

Моя файловая оболочка

    /*
     Initializing the file wrapper
     */
    _fileWrapper = [[NSFileWrapper alloc] initDirectoryWithFileWrappers:nil] ;
    [_fileWrapper setFilename:@"attached_files"] ;
    [_fileWrapper setPreferredFilename:@"attached_files"] ;

2

Сохраняю второй раз той же командой. я получаю ошибку

 Error Domain=NSCocoaErrorDomain Code=516 "The file already exists". 

Данное имя на самом деле "attached_files".

3

Если я использую опцию NSFileWrapperWritingWithNameUpdating, я все равно получаю ту же ошибку.

4

Если я использую опцию NSFileWrapperWritingAtomic, я не получаю ошибок.


person Colas    schedule 10.03.2014    source источник
comment
почему бы не обновить файл напрямую?   -  person Anoop Vaidya    schedule 10.03.2014
comment
Я не могу писать прямо в файле документа. В противном случае приложение будет жаловаться, что файл был изменен другим приложением.   -  person Colas    schedule 10.03.2014
comment
Компилятор, который поставляется с Xcode 7, выдает предупреждение с этим кодом: Null passed to a callee that requires a non-null argument для -[NSFileWrapper initDirectoryWithFileWrappers:].   -  person Hyperbole    schedule 22.10.2015