Как я могу открыть приложение, основанное на NSDocument, папки, но сохранить связанный документ в Application Support? - PullRequest
3 голосов
/ 21 августа 2011

В моем приложении на основе NSDocument мои документы должны быть связаны с каталогами (они являются индексом каталога)

Я хочу иметь возможность открывать / сохранять документы в соответствии со следующим вариантом использования:

  1. Открытие каталога: а) если в папке есть файл .myapp, откройте его б) еще посмотрите, есть ли файл HASH-OF-PATH-basename.myapp в ~ / Library / Application Support / MyApp и откройте его б) еще создать новый документ в памяти

  2. Открытие файла xxx.myapp, как обычно

  3. Сохранить / Автосохранение a) если источником текущего документа был файл сохранения 1b, 1c или 2 в ~ / Library / Application Support / MyApp / HASH-OF-PATH-basename.myapp b) если источником текущего документа был 1a, сохраните в этот файл .myapp

  4. Сохранить как / Сохранить в б) сохранить xxxxx.myapp в том месте, где пользователь указывает

Очевидной вещью, по-видимому, было просто реализовать readFromURL: ofType: error: L и writeToURL: ofType: forSaveOperation: originalContentsURL: error: и при необходимости переключать URL в зависимости от операции сохранения.

Это работает в том, что я могу открывать файлы и папки, и когда я сохраняю открытую папку, мой файл сохраняется в Application Support, но затем после writeToURL: ofType: forSaveOperation: originalContentsURL: ошибка возникает ошибка и отображается диалоговое окно с следующая ошибка:

NSDocument could not delete the temporary item at
file://localhost/private/var/folders/6P/6PNpIB-6HreGE+Ikqf5dWU+++TI/
-Tmp-/TemporaryItems/(A%20Document%20Being%20Saved%20By%20MyApp%203)
/SomeDirectory. 
Here's the error:
Error Domain=NSCocoaErrorDomain Code=4 UserInfo=0x200583a00 
"“SomeDirectory” couldn’t be removed."

1 Ответ

1 голос
/ 21 августа 2011

Это оказалось довольно легко решить.

Я переопределил saveToURL: ofType: forSaveOperation: error: и сделал там замену URL и типа на основе типа SaveOperation.

Теперь все работает как положено.

...