2012-06-25 19 views
5

से पुन: दिखाई देता मैं बादल में दस्तावेजों के साथ काम कर रहा हूँ ... * बादल * के लिए कोई दस्तावेज़ जोड़े बादल * किसी भी तरह कि दस्तावेज़ से कि दस्तावेज़ हटाएं कुछ ही सेकंड बाद में पुन: दिखाई देता।नष्ट कर दिया गया UIDocument अक्सर बादल

यहाँ विवरण है:

मैं फिर इस

NSURL *ubiq = [[NSFileManager defaultManager] URLForUbiquityContainerIdentifier:nil]; 
    NSURL *ubiquitousPackage = [[ubiq URLByAppendingPathComponent:@"Documents"] URLByAppendingPathComponent:@"somenewfilename"]; 

    MyDoc* docTemp = [[MyDoc alloc] initWithFileURL:ubiquitousPackage]; 
    docTemp.mapContent = [NSString stringWithString:self.currentdocument.mapContent]; 

    [docTemp saveToURL:[docTemp fileURL] 
     forSaveOperation:UIDocumentSaveForCreating 
    completionHandler:^(BOOL success) {    
     if (success) { 
      DLog(@"New document %@ saved/added: %@", newFilename, docTemp); 
     } 
     else { 
      DLog(@"Failed saving new document: %@", newFilename); 
     } 
     [docTemp release]; 
    }]; 

तरह UIDocument का एक उदाहरण बनाने के इस तरह बाद में इसे हटा दें: ऊपर कर के बावजूद

NSURL* fileURL = self.currentdocument.fileURL; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void)  { 
    NSFileCoordinator* fileCoordinator = [[NSFileCoordinator alloc] initWithFilePresenter:nil]; 
    NSError* error = nil; 
    [fileCoordinator coordinateWritingItemAtURL:fileURL options:NSFileCoordinatorWritingForDeleting error:&error byAccessor:^(NSURL* writingURL) { 
     if (error != nil) { 
      DLog(@"Error with %@! %@", fileURL, error); 
      return; 
     } 
     DLog(@"Got writingURL: %@", writingURL); 
     NSFileManager* fileManager = [[NSFileManager alloc] init]; 
     if ([fileManager removeItemAtURL:writingURL error:nil]) { 
      DLog(@"Deleted %@!", writingURL); 
     } 
     else { 
      DLog(@"ERROR Failed deleting %@!", self.currentdocument); 
     } 
     [fileManager release]; 
     [fileCoordinator release]; 
    }]; 
}); 

अब, यह की तरह लग रहा फ़ाइल को (लघु) के लिए हटा दिया गया है, लेकिन कई अवसरों पर हटाए गए दस्तावेज़ क्लाउड में एक या कुछ सेकंड बाद फिर से दिखाई देते हैं। (मैं इसे किसी अन्य डिवाइस पर iCloud सेटिंग्स के माध्यम से देख सकता हूं, या एक क्वेरी के माध्यम से जो अद्यतनों पर अधिसूचना भेजता है)। केवल कुछ अवसरों पर फ़ाइल हटा दी जाती है। क्या चल रहा है?

मुझे ध्यान रखना चाहिए कि सेटिंग-> iCloud से फ़ाइल को हटाने से उपरोक्त पैटर्न का कारण बन जाएगा। फ़ाइल कुछ सेकंड बाद जादुई रूप से फिर से दिखाई देती है। समय मुद्दों? मुद्दों को सिंक करें?

+0

क्या आपको पता चला कि इसे कैसे हल किया जाए? – Bongeh

+1

मुझे लगता है कि मेरी समस्या यह थी कि मैंने हमेशा अपनी सूची में सभी दस्तावेज़ रखे (मेरे पास क्लाउड में सभी दस्तावेज़ों के साथ एक इंटरफेस है ...) खुला। आह, लंबी कहानी छोटी है जब तक कि आप उन्हें एक प्रकार के संपादक इंटरफ़ेस या इसी तरह से खोलने तक फ़ाइलों को तब तक नहीं खोलते हैं। जब तक एक डॉक्टर खुला रहता है, मुझे लगता है कि इसे हटाने के लिए यह समझ में नहीं आता है। जब मैंने उपयोगकर्ता उन पर टैप किया तो मैंने अपने ऐप को केवल खुले दस्तावेज़ों में बदल दिया। मुझे लगता है कि यह मेरी समस्या तय है। – Jonny

+0

ठीक है, धन्यवाद, इससे मुझे काम करने में मदद मिल सकती है कि मेरे दस्तावेज़ क्यों नहीं चल रहे हैं! शायद मुझे उन्हें बंद करने की ज़रूरत है :) – Bongeh

उत्तर

9

खुले होने पर दस्तावेज़ों को हटाएं नहीं। :-P

+0

ईश्वर ने निंदा की, मैंने इस पर एक कमजोर 20 निराशाजनक घंटे खो दिए। इसे साफ़ करने के लिए Thanx! – codrut

1

मेरे मामले में, "accommodatePresentedItemDeletionWithCompletionHandler:" एक बार हटाए जाने वाली फ़ाइलों को फिर से दिखने के लिए काम करता है, जब यूआईडी दस्तावेज़ अनजाने में खोला जाता है तो बंद हो जाता है। आप इसे का उपयोग यहाँ देख सकते हैं: iCloud - renaming open documents on another device sometimes fails

2

इस क्षेत्र में समस्याओं में से एक संभावित स्रोत है कि आपके UIDocument की documentState इन राज्यों के माध्यम से क्रमिक रूप से पर हटाना गुजरता है ...

8 (UIDocumentStateEditingDisabled)

तो 0 (UIdocumentStateNormal) शायद फ़ाइल नाम अद्यतन करने के लिए,

तो 4 (UIDocumentStateSavingError) को हटाने के लिए।

इसलिए हटाए जाने के अपने कोड आग है कि आप को प्राप्त होने वाली एक UIDocumentStateChangedNotification कह रही है कि राज्य सामान्य है के खिलाफ लड़ जा सकता है।

मुझे आशा है कि इससे किसी की मदद मिलेगी।

अद्यतन

इसके बजाय, DocumentState से सब कुछ ड्राइव करने की कोशिश कर के रूप में मैं असफल एक महीने (Wenderlich उदाहरण के बाद) करने के लिए कोशिश की

...

मेरे लिए कुंजी को accommodatePresentedItemDeletionWithCompletionHandler जोड़ने था Uclocument subclassed, जिसमें एक करीबी WithCompletionhandler है: कॉल जो सभी डिवाइसों पर खुली फ़ाइल को बंद कर देता है, हटाया जाता है। यह स्रोत डेटा सरणी से इस आइटम के उदाहरणों को हटाने के लिए मेरे प्रबंधक को एक अधिसूचना पोस्ट करता है।

यह अधिक मजबूत और अनुमानित लगता है। मुझे अभी भी कई दस्तावेज़स्टेट 8 और स्टेट 9 को हटाने के बाद प्रत्येक डिवाइस पर पहुंचने वाला दिखाई देता है, जहां मैं केवल एक को देखने की अपेक्षा करता हूं, लेकिन यह एक अलग मुद्दा हो सकता है।

संबंधित मुद्दे