CoreData с автосохранением сохраняется 1 раз, затем вылетает с «NoSuchFileError» при всех следующих автосохранениях - PullRequest
0 голосов
/ 09 мая 2011

Приложение на основе NSDocument с использованием CoreData.Очень просто - две сущности с отношениями один-ко-многим.Это приложение прекрасно работает с сохранением, загрузкой и т. Д.

Затем я включил автосохранение следующим образом:

[[NSDocumentController sharedDocumentController] setAutosavingDelay:0.1];

... и сразу все пошло не так.

Первое автосохранение работает, 100% правильно.то есть он сохраняет файл в личном каталоге пользователя, и если вы выходите из приложения и перезапускаетесь, autosaved-doc автоматически открывается заново.Круто!

Но как только вы сделаете второе изменение данных, вы получите сбой в автосохранении, с этим:

error = Error Domain=NSCocoaErrorDomain Code=134030 UserInfo=0x1001a1be0 "An error occurred while saving."
 Underlying Error=(Error Domain=NSCocoaErrorDomain Code=4 UserInfo=0x10019a840 "The file doesn’t exist."
 Underlying Error=(Error Domain=NSPOSIXErrorDomain Code=2 UserInfo=0x100150d00 "The operation couldn’t be completed. No such file or directory"))

... что не имеет смысла для меня,Почему auto * SAVE * заботится о том, существует файл или нет?Почему это сработало бы в первый раз, а затем не сработало в последующие?

NB. Я проверил, и Apple пытается использовать идентичное имя файла при втором вызове автосохранения - если это сработало в первый раз, почемуошибка 0.5 секунд ???

Ответы [ 2 ]

1 голос
/ 09 мая 2011

Почему вы пытаетесь сохранить автоматически десять раз в секунду?Это слишком часто.На самом деле сохранение вашего файла может занять более десятой доли секунды.Более разумное значение будет 10 секунд, и это, вероятно, чаще, чем на самом деле необходимо.

0 голосов
/ 16 мая 2011

Чтение между строками, это, кажется, известный недостаток реализации Apple Core Data с NSDocument: автосохранение нарушено, и они не намерены это исправлять.

Из NSPersistentDocument (подклассNSDocument, который используется при выборе Core Data и NSDocument во время создания проекта):

«Сохранить в…» и автосохранение не поддерживаются напрямую - Базовые данные не могут быть сохранены в хранилище и сохранены те же изменениясостояние в контексте управляемого объекта, при этом сохраняя несохраненный стек в качестве текущего документа.

Интересное утверждение, что «Основные данные не могут ...» - конечно, CD «может» сделать это, хотяЯ вижу, что это, вероятно, много кода и прыжков через обручи, чтобы заставить его работать.Звучит скорее как оправдание, чем объяснение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...