Dowiedziałem się, jak zmusić rdzeń magazynu danych do zsynchronizowania z usługą iCloud. Wystarczy "dotknąć" dowolne pliki pokwitowań w folderze Dane w systemie plików Ubiquity. Poniższy kod zrobi to. Aby wymusić synchronizację, wywołaj metodę syncCloud. Dla każdego znalezionego pliku "pokwitowania" zaktualizuje on sygnaturę czasową modyfikacji plików do bieżącego czasu, zasadniczo wykonując "dotyk" pliku. Jak tylko to się stanie, iCloud sprawdzi i zsynchronizuje wszystkie podstawowe pliki danych wymagające synchronizacji w iCloud. Z tego co wiem, tak działa symulator lub Xcode po wybraniu opcji "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;
}
});
}
To samo pytanie .. Chcę również wymusić synchronizację –