Ho capito come forzare un archivio dati principale da sincronizzare su iCloud. Devi solo "toccare" i file di ricevute nella cartella Dati nel filesystem di Ubiquity. Il codice qui sotto farà questo. Per forzare una sincronizzazione, chiama il metodo syncCloud. Per ogni file "ricevuta" rilevato, aggiornerà l'indicatore di data/ora di modifica dei file all'ora corrente, essenzialmente facendo un "tocco" sul file. Non appena ciò accadrà, iCloud controllerà e sincronizzerà tutti i file di dati di base che necessitano della sincronizzazione in iCloud. Per quanto posso dire, questo è come il simulatore o Xcode lo fa quando selezioni l'opzione "Trigger iCloud Sync".
@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;
}
});
}
fonte
2016-01-29 04:49:00
Stessa domanda .. Voglio anche forzare la sincronizzazione –