ОШИБКА: exportAsynchronouslyWithCompletionHandler более одного раза. Возобновление экспорта в avfoundation

Привет, я разрабатываю приложение для iphone, которое создает объект AVAssetExportSession для сохранения и создания видеофайла. Все в порядке (файл создается и правильно сохраняется в папке документов), за исключением случаев, когда я пытаюсь возобновить процесс сохранения. Если я нажму кнопку «Домой», чтобы выйти из приложения (или если я получу звонок или смс), метод exportAsynchronouslyWithCompletionHandler завершится ошибкой. В документации Apple говорится:

«Экспорт завершится ошибкой, если вы попытаетесь перезаписать существующий файл или записать файл вне песочницы приложения. Если вам нужно перезаписать существующий файл, вы должны сначала удалить его. Экспорт также может завершиться ошибкой, если:

Есть входящий телефонный звонок

Ваше приложение находится в фоновом режиме, а другое приложение начинает воспроизведение

В таких ситуациях обычно следует сообщить пользователю о сбое экспорта, а затем разрешить пользователю перезапустить экспорт».

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

"Завершение работы приложения из-за необработанного исключения "NSInternalInconsistencyException", причина: "Невозможно вызвать exportAsynchronouslyWithCompletionHandler: более одного раза"."

Кажется, что после того, как [ассет CancelExport] exportAsynchronouslyWithCompletionHandler останется живым, это возможно? Я также пытался экспортировать актив в другой контроллер представления во второй раз, но результат тот же. Как я могу повторить сохранение после прерывания без потери моего актива (он создан другим контроллером представления, и я не могу восстановить его без нового взаимодействия с пользователем)?

Это мой код:

-(недействительно) сохранить{

[asset exportAsynchronouslyWithCompletionHandler:^
 {
     switch (asset.status) 
     {
         case AVAssetExportSessionStatusCompleted: 
         {


             [self performSelectorOnMainThread:@selector(lanciosuccess) withObject:nil waitUntilDone:NO];

             break;
         }

         case AVAssetExportSessionStatusFailed:
         {

             [asset cancelExport];
             [self performSelectorOnMainThread:@selector(sospendi) withObject:nil waitUntilDone:NO];

             break;
         }
         case AVAssetExportSessionStatusUnknown: 
         {
              NSLog (@"unknow");



             break;
         }
         case AVAssetExportSessionStatusWaiting: 
         {
              NSLog (@"waiting");



             break;
         }
         case AVAssetExportSessionStatusCancelled: 
         {
              NSLog (@"cancelled");



             break;
         }


     };

 }];

}

- (недействительно) sospendi {

if ([[NSFileManager defaultManager] fileExistsAtPath:[asset.outputURL path]]) 
{
    [[NSFileManager defaultManager] removeItemAtPath:[asset.outputURL path] error:nil];
}

[self save];

}


person Cri1682    schedule 05.08.2011    source источник
comment
Это поможет мне отладить мою проблему stackoverflow.com/questions/9653241/   -  person Nilesh Kikani    schedule 21.03.2012