Frage

ich benutze NSFileManager'S startDownloadingUbiquitousItemAtURL um die Datei von iCloud auf eine lokale Kopie herunterzuladen (in diesem Fall verfügt die lokale Datei noch nicht über die Kopie der Datei).Ich kann den Rückruf für diesen Prozess anscheinend nicht finden.Ich benötige den Rückruf, um meiner App mitzuteilen, dass die angeforderte Datei vollständig heruntergeladen wurde (in die lokale Kopie), damit eine andere Aufgabe mit dem Lesen des Inhalts der Datei beginnen und andere Aufgaben ausführen kann.

Ich kann überprüfen, ob die Datei heruntergeladen wurde.Aber es würde bedeuten, ständig Umfragen durchzuführen.Gibt es eine Möglichkeit, dies zu tun, ohne einen Timer für die Abfrage festzulegen?

War es hilfreich?

Lösung

Ich glaube, dass diese Methode in Verbindung mit Dateikoordinatoren basierend auf verwendet werden soll Dokumentation von Apple.Sie müssten also einen Dateikoordinator wie diesen verwenden:

NSURL *itemURL = nil; // this is the URL you want to read from

__block NSData *data = nil;
NSError *error = nil;
NSFileCoordinator *coordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil];
[coordinator coordinateReadingItemAtURL:itemURL options:0 error:&error byAccessor:^(NSURL *newURL) {
    data = [NSData dataWithContentsOfURL:newURL];
}];

Dies wird jedoch synchron sein. Wenn Sie also etwas asynchron tun möchten, können Sie Blöcke wie folgt verwenden:

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    // read info from the URL using the code above
    dispatch_async(dispatch_get_main_queue(), ^{
        // handle data read from the URL
    });
});

Andere Tipps

Um korrekt in iCloud hochzuladen, benötigen Sie auch so etwas (alles andere hat nicht funktioniert :| )

   NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil];

   NSString *FileNS = @"myfile.dat";
   NSURL *FileURL = [[ubiq URLByAppendingPathComponent:@"Documents"] URLByAppendingPathComponent:FileNS ];


   BYTE *data = NULL;//Put your file data in here
   int FileSize = 0;//replace with your file size
   NSData *myData = [[NSData alloc] initWithBytes:data length:FileSize];
   [myData writeToFile:[FileURL path] atomically:YES];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top