UIDocument не может закрыться снова? - PullRequest
2 голосов
/ 05 марта 2012

Когда UIDocument закрыт, может ли он снова закрыться? Даже если это documentState, UIDocumentStateNormal после повторного открытия?

Пожалуйста, помогите мне. Большое спасибо!

[document openWithCompletionHandler:^(BOOL success) {
    if (success) {

        [document closeWithCompletionHandler:^(BOOL success) {
            if (success) {

                [document openWithCompletionHandler:^(BOOL success) {
                    if (success) {

                        NSLog(@"%d", document.documentState);

                        //Exception
                        [document closeWithCompletionHandler:^(BOOL success) {
                            if (success) {
                            } 
                        }];
                    } 
                }];
            } 
        }];
    } 
}];

Когда closeWithCompletionHandler вызывается с отметкой «Exception», возникает исключение:

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', 
reason: 'closeWithCompletionHandler called while document is already closing'

Ответы [ 4 ]

1 голос
/ 29 марта 2012

Кажется, вы можете закрывать UIManagedDocument только один раз за каждое представление.

У меня была эта проблема, и я решил ее, вместо того, чтобы заново открывать тот же документ, я создал новый с теми же данными (используя собственный метод initWith ...).

Затем вы можете «закрыть» новый экземпляр документа.

Имейте в виду, что новый экземпляр документа будет иметь новый контекст управляемого объекта, поэтому вам, вероятно, не следует пытаться использовать управляемые объектыиз оригинального документа.При необходимости повторно загрузите их в новом экземпляре.

1 голос
/ 24 апреля 2012

У меня та же проблема, и удаление второго закрытия решило ее для меня.Я обнаружил, что пока я использую отдельный экземпляр UIManagedDocument для второго открытия / закрытия, я не получаю эту ошибку.

Кроме того, я обнаружил, что я не получал ошибку постоянно в предыдущем коде.

0 голосов
/ 07 июля 2013

Открытие и закрытие документов - это асинхронное действие (то есть это выполняется в другом потоке в фоновом режиме). Делая открытия и закрытия так близко друг к другу, вы пересекаете другой процесс. Перед выполнением следующего шага убедитесь, что другой поток завершен (открытие или закрытие).

0 голосов
/ 05 марта 2012

Обратите внимание, что вы все еще находитесь внутри первого closeWithCompletionHandler метода, когда вызываете второй. Читая исключение, которое кажется причиной.

...