Хорошо, я довольно новичок в Какао и Objective-C, а также в ООП в целом.
В качестве фона я работаю над расширяемым редактором, который хранит документы пользователя в пакете. Это, конечно, потребовало некоторого «веселья», чтобы обойти некоторые проблемы с NSFileWrapper
(то есть несколько хитрый процесс написания и загрузки, чтобы избежать создания NSFileWrappers
для каждого отдельного документа в комплекте). Решение, к которому я пришел, состояло в том, чтобы по существу трактовать мой подкласс NSDocument
как просто оболочку - использовать его для создания папки для пакета, а затем выдавать за запись фактического содержимого документа другим методам.
К сожалению, в какой-то момент я, кажется, полностью облажался. Я не знаю, как это произошло, но закрытие окна документа больше не освобождает документ. Кажется, что объект документа не получает сообщение «закрыть» - или любые другие связанные сообщения - даже если окно успешно закрывается.
Конечным результатом является то, что если я запусту свое приложение, создам новый документ, сохраню его, затем закрою и попытаюсь открыть его снова, окно документа никогда не появится. С помощью некоторого творческого подкласса и NSLogging
мне удалось выяснить, что объект документа все еще находится в памяти и все еще привязан к экземпляру NSDocumentController
, и поэтому попытка открыть документ так и не достигла уровня NSDocumentController's
"хмм, в настоящее время есть один открытый "чек.
У меня были экземпляры NSWindowController
и NSDocumentController
, но я полностью удалил их из своего проекта. Я переопределил почти каждый метод для NSDocument
, пытаясь выяснить, где проблема. Насколько я знаю, все мои привязки Interface Builder верны - «Закрыть» в главном меню присоединено к performClose:
первого ответчика и т. Д., И я также пробовал использовать свежие необработанные xib-файлы MainMenu и Document.
Я подумал, что это может быть что-то странное с моим кодом написания пакета, поэтому я в основном удалил все и начал с нуля, но, похоже, это не сработало. Я удалил свои переопределения -init
, и это тоже не помогло. У меня нет источника каких-либо простых приложений для документов, поэтому я не попробовал следующий логический шаг (заменить мой известный работающий код методами readFromUrl
и writeToUrl
).
У меня была эта проблема в течение шестнадцати часов непрерывного поиска неисправностей, и, разумеется, я нахожусь в конце своей веревки. Если я не могу понять это, я думаю, что я собираюсь попробовать проект с нуля с намного большим количеством кода и интенсивности, основанной на путанице связанного документа.