2012-04-19 21 views

Odpowiedz

9

Aby usunąć dokument z iCloud, najpierw trzeba uzyskać nazwę pliku, który chcesz usunąć. a następnie możesz go usunąć za pomocą NSFileManager.

NSString *saveFileName = @"Report.pdf"; 
NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; 
NSURL *ubiquitousPackage = [[ubiq URLByAppendingPathComponent:@"Documents"] URLByAppendingPathComponent:saveFileName]; 
NSFileManager *filemgr = [NSFileManager defaultManager]; 
[filemgr removeItemAtURL:ubiquitousPackage error:nil]; 

Jest to sposób, który służy do usuwania dokumentu, Sprawdź to. To jest woking dla mnie świetne. Dzięki

+3

Zgodnie z dokumentami należy usunąć elementy asynchroniczne w kolejce tła: http://developer.apple.com/library/ios/documentation/DataManagement/Conceptual/DocumentBasedAppPGiOS/ManageDocumentLifeCycle/ManageDocumentLifeCycle. html # // apple_ref/doc/uid/TP40011149-CH4-SW4 – Jonny

+0

Tam, gdzie to działa, nie korzysta z implementacji 'UIDocument'' NSF Odpowiedź ileCoordinator' Adrian Sarli jest lepsza. – Joseph

+1

Dla odniesienia, zauważ, że 'removeItemAtURL:' nie usunie dokumentu, jeśli nie został jeszcze pobrany z iCloud na urządzenie. – Mark

0

See Jabłko dokumentacja "Zarządzanie życiowego Cyle Dokumentu" pod „Usuwanie dokumentu. "

13

Skopiowane z sekcji "Deleting a Document" z Document-Based App Programming Guide for iOS

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void) { 
    NSFileCoordinator* fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil]; 
    [fileCoordinator coordinateWritingItemAtURL:fileURL options:NSFileCoordinatorWritingForDeleting 
     error:nil byAccessor:^(NSURL* writingURL) { 
     NSFileManager* fileManager = [[NSFileManager alloc] init]; 
     [fileManager removeItemAtURL:writingURL error:nil]; 
    }]; 
}); 

NB:". Po usunięciu dokumentu z magazynu jego kod powinien być zbliżony do tego, co robi UIDocument dla operacji odczytu i zapisu. Należy wykonać usunięcie asynchronicznie w kolejce w tle, i powinien użyć koordynacji pliku.”

+1

Jeśli używasz "identyfikatora użytkownika", nie ma potrzeby implementacji własnego menedżera NSFileCoordinator, jest on już upakowany w "UIDocument". Używanie twojej metody jest drogie w wielu instancjach 'NSFileCoordinator'. Zobacz: https://developer.apple.com/library/ios/documentation/FileManagement/Conceptual/FileSystemProgrammingGuide/FileCoordinators/FileCoordinators.html – Joseph

+0

@Joseph Zastanawiam się, z powyższej odpowiedzi wynika, że ​​albo nie jestem w stanie usunąć przedmiot, który jest przedmiotem UIDocument, z iCloud lub aplikacja zawiesza się, gdy próbuje to zrobić? Moje powiązane pytanie [tutaj] (http://stackoverflow.com/questions/43821141/app-hangs-deleting-icloud-document-when-following-guideline-using-nsfilecoordi) – yohannes

1

SWIFT 3 pochodzą z @AlexChaffee„s odpowiedź

func deleteZipFile(with filePath: String) { 
    DispatchQueue.global(qos: .default).async { 
     let fileCoordinator = NSFileCoordinator(filePresenter: nil) 
     fileCoordinator.coordinate(writingItemAt: URL(fileURLWithPath: filePath), options: NSFileCoordinator.WritingOptions.forDeleting, error: nil) { 
      writingURL in 
      do { 
       try FileManager.default.removeItem(at: writingURL) 
      } catch { 
       DLog("error: \(error.localizedDescription)") 
      } 
     } 
    } 
} 
Powiązane problemy