2013-03-14 2 views
0

Я обнаружил, что я могу обнаружить делецию UIDocument на ICloud по следующему методу:Правильное обращение с делецией UIDocument в другом случае вашего приложения с ICloud

- (void)accommodatePresentedItemDeletionWithCompletionHandler:(void (^)(NSError *))completionHandler 

Этот метод получает правильно, но я не знаю, что делать в методе. На данный момент я закрываю документ, если он все еще открыт, но похоже, что документ сохраняется на старом пути при закрытии, поэтому документ снова появляется.

Я уже интенсивно искал, но я ничего не нашел ни в документе Apple, ни в любом форуме.

Был ли кто-то подобным опытом или кто-то правильно обработал удаление?

+0

Похоже, образец приложения Lister от Apple просто отклоняет контроллер просмотра, не закрывая документ. –

ответ

2

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

Для всех, кто хочет обнаружить удаление: Переписать этот метод в подклассе UIDocument с помощью следующего кода:

- (void)accommodatePresentedItemDeletionWithCompletionHandler:(void (^)(NSError *errorOrNil))completionHandler 
{ 
    sceneLampDocument* presentedDocument = self; 
    [presentedDocument closeWithCompletionHandler: ^(BOOL success) { 
     NSError* error = nil; 
     if (!success) 
     { 
      NSDictionary* userInfo = [NSDictionary dictionaryWithObjectsAndKeys: 
             @"Could not close document that is being deleted on another device", 
             NSLocalizedDescriptionKey, nil]; 
      error = [NSError errorWithDomain: @"some_suitable_domain" 
             code: 101 
            userInfo: userInfo]; 
     } 

     completionHandler(error); // run the passed in completion handler (required) 

     dispatch_async(dispatch_get_main_queue(),^
         { 
          //[super accommodatePresentedItemDeletionWithCompletionHandler:completionHandler]; 

          NSDictionary *userInfo = [NSDictionary dictionaryWithObject:self forKey:@"document"]; 
          [[NSNotificationCenter defaultCenter] postNotificationName: @"documentDeletedOnAnotherDevice" 
                       object: self 
                      userInfo: userInfo]; 
         }); 
     }]; 
} 

Я надеюсь, что это поможет кому-то

+1

Спасибо за публикацию этого. Документы Apple не были слишком ясными, будет ли закрываться сам UIDocument или я должен сделать это в своем подклассе. Кстати, вместо публикации уведомления вы можете прослушать 'UIDocumentStateChangedNotification' и проверить, содержит ли' documentState' 'UIDocumentStateClosed'. Еще одно уведомление для определения :-) – bio

Смежные вопросы