2012-07-01 13 views
5

मैं अपने ऐप के डेटा को सिंक करने के लिए कोर डेटा के साथ iCloud का उपयोग कर रहा हूं।सिंक करने के लिए कोर डेटा के साथ iCloud को कैसे मजबूर करें?

मैंने सब कुछ करने की कोशिश की और आखिरकार यह पूरी तरह से काम करता है।

लेकिन मेरे पास एक प्रश्न है।

क्या कोई तरीका है जो iCloud को सिंक करने के लिए कह रहा है?

ऐप शुरू होने पर यह सिंक हो जाता है, लेकिन दूसरी बार। ऐसा लगता है कि यह यादृच्छिक रूप से सिंक। मुझे इसे संभालने का तरीका नहीं मिल रहा है।

किसी भी मदद?

धन्यवाद।

+0

वही प्रश्न .. मैं भी समन्वय को मजबूर करना चाहता हूं –

उत्तर

0

आप किसी भी NSURL आइटम इस विधि के साथ iCloud में संचित किया जा करने के लिए मजबूर करने के लिए है:

- (BOOL)addBackupAttributeToItemAtURL:(NSURL *)URL 
{ 
    NSLog(@"URL: %@", URL); 
    assert([[NSFileManager defaultManager] fileExistsAtPath: [URL path]]); 

    NSError *error = nil; 
    BOOL success = [URL setResourceValue: [NSNumber numberWithBool: NO] 
            forKey: NSURLIsExcludedFromBackupKey error: &error]; 
    return success; 
} 

आप हर निर्देशिका पर इस विधि का शुभारंभ और फाइल डाउनलोड कर रहे हैं/दस्तावेज़ या लाइब्रेरी में बनाने जा रहे हैं की जरूरत निर्देशिका।

0

मुझे विश्वास नहीं है कि iCloud और कोर-डेटा का उपयोग करते समय सिंक होगा जब आपके पास कोई नियंत्रण होगा। UIDocument और iCloud के साथ मैंने सफलता की अलग-अलग डिग्री के साथ startDownloadingUbiquitousItemAtURL का उपयोग किया है, लेकिन कोर-डेटा के लिए मुझे नहीं लगता कि कोई समकक्ष है - मुझे किसी को यह बताना अच्छा लगेगा कि अन्यथा मुझे बताएं अन्यथा ...

1

मुझे पता चला कि कैसे iCloud को सिंक करने के लिए कोर डेटा स्टोर को मजबूर करने के लिए। आपको बस Ubiquity फाइल सिस्टम में डेटा फ़ोल्डर में किसी रसीद फ़ाइलों को "स्पर्श" करने की आवश्यकता है। नीचे दिया गया कोड यह करेगा। सिंक को मजबूर करने के लिए, syncCloud विधि को कॉल करें। प्रत्येक "रसीद" फ़ाइल के लिए यह पाता है, यह वर्तमान समय में फाइल संशोधन समय टिकट को अद्यतन करेगा, अनिवार्य रूप से फ़ाइल पर "स्पर्श" कर रहा है। जैसे ही ऐसा होता है, iCloud किसी भी कोर डेटा फ़ाइलों को जांच और सिंक करेगा जो iCloud में सिंक्रनाइज़ेशन की आवश्यकता है। जैसा कि मैं बता सकता हूं, इस तरह सिम्युलेटर या एक्सकोड करता है जब आप "ट्रिगर iCloud सिंक" विकल्प का चयन करते हैं।

@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; 
     } 
    }); 
} 
संबंधित मुद्दे