Я работаю с основанным на документе приложением OS X с основными данными. Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я редактирую любое поле в документе, после того, как я нажимаю клавишу Tab или нажимаю на что-то еще (т.е. я заканчиваю редактирование / изменение фокуса), документ помечается как чистый и отмена отменяется. Однако когда я пытаюсь сохранить файл, полученный документ открывается без введенных мной данных. В чем может быть проблема, или какие-либо указатели на то, где искать, чтобы исправить это? Вот кое-что, что я знаю, и то, что я уже пробовал:
Я знаю, что это не каким-то образом сохраняется, потому что он никогда не останавливается на точке останова в моем переопределенном writeSafelyToURL:(NSURL *)inAbsoluteURL ofType:(NSString *)inTypeName forSaveOperation:(NSSaveOperationType)inSaveOperation error:(NSError **)outError
и никогда не отправляет NSManagedObjectContextDidSaveNotification
.
Документы упакованы в каталог NSFileWrapper
с основным хранилищем данных (а также некоторыми другими файлами). Я получаю доступ к сущностям через NSObjectController
и пару NSArrayController
s. Это происходит как со свойствами основных данных, так и с зарегистрированными вручную изменениями в остальной части оболочки файла.
Обновление: по предложению Мартина я попробовал уведомления NSUndoManager
, и все, что я могу извлечь из этого, - это то, что в игре более одного менеджера отмены. Если я добавлю наблюдателя для NSUndoManager, он не будет публиковать, если я укажу объект, а затем, если я этого не сделаю, объект уведомления не равен [self undoManager]
. Я добавил updateChangeCount
в свою категорию на NSPersistentDocument, и он никогда не вызывается. setDocumentEdited
в основном подтвердил, что что-то о потере первого респондента передает НЕТ в этот метод. Что может быть причиной, и как я могу это исправить?