Ich habe herausgefunden, wie Erzwingen, dass ein zentraler Datenspeicher mit iCloud synchronisiert wird. Sie müssen nur alle Quittungsdateien im Ordner "Data" des Ubiquity-Dateisystems "anfassen". Der folgende Code wird dies tun. Um eine Synchronisierung zu erzwingen, rufen Sie die syncCloud-Methode auf. Für jede "Quittungs" -Datei, die es findet, wird der Änderungszeitpunkt der Dateien auf die aktuelle Zeit aktualisiert, wobei im Wesentlichen ein "Berühren" der Datei erfolgt. Sobald dies der Fall ist, prüft und synchronisiert iCloud alle wichtigen Datendateien, die in iCloud synchronisiert werden müssen. Soweit ich das beurteilen kann, macht es der Simulator oder Xcode, wenn Sie die Option "Trigger iCloud Sync" auswählen.
@property (strong, nonatomic) NSMetadataQuery *query;
-(void) init
{
self.query = [[NSMetadataQuery alloc] init];
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(didFinishMetadataQuery)
name: NSMetadataQueryDidFinishGatheringNotification
object: self.query];
}
-(void) didFinishMetadataQuery
{
// Query completed so mark it as completed
[self.query stopQuery];
// For each receipt, set the modification date to now to force an iCloud sync
for(NSMetadataItem *item in self.query.results)
{
[[NSFileManager defaultManager] setAttributes: @{NSFileModificationDate:[NSDate date]}
ofItemAtPath: [[item valueForAttribute: NSMetadataItemURLKey] path]
error: nil];
}
}
-(void) syncCloud
{
// Look for files in the ubiquity container data folders
[self.query setSearchScopes:@[NSMetadataQueryUbiquitousDataScope]];
// Look for any files named "receipt*"
[self.query setPredicate:[NSPredicate predicateWithFormat:@"%K like 'receipt*'", NSMetadataItemFSNameKey]];
// Start the query on the main thread
dispatch_async(dispatch_get_main_queue(), ^{
BOOL startedQuery = [self.query startQuery];
if (!startedQuery)
{
NSLog(@"Failed to start query.\n");
return;
}
});
}
Gleiche Frage .. Ich möchte auch die Synchronisierung erzwingen –