2012-12-11 8 views
11

मैंने अभी एक ऐप पर iCloud समर्थन जोड़ा है जिस पर मैं काम कर रहा हूं। यह बहुत अच्छा काम कर रहा है, सिवाय इसके कि जब मैं दस्तावेज़ में दस्तावेज़ के बिना एप्लिकेशन खोलता हूं तो iCloud ओपन फ़ाइल संवाद प्रकट होता है और मैं इसे नहीं चाहता!iCloud सक्षम - एप्लिकेशन लॉन्च पर प्रदर्शित खुली फ़ाइल को रोकें?

मेरे ऐप प्रतिनिधि में मेरे पास है:

- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender 
{ 
    [mainWindowController.window makeKeyAndOrderFront:self]; 
    return NO; 
} 

कौन सा मैं का उपयोग अपने स्वयं के कस्टम खिड़की दिखाने के लिए। हालांकि अब, iCloud दोनों खुले फ़ाइल संवाद और मेरे स्वयं के संवाद प्रदर्शित होते हैं। ICloud संवाद से कैसे छुटकारा पा सकता है इस पर कोई विचार?

Default Window

+0

क्या कोई इस समस्या को हल करता है? इसके बारे में स्टैक ओवरफ़्लो में 3 प्रश्न हैं, और कोई भी जवाब मेरे लिए काम नहीं करता है। – coolcool1994

उत्तर

0
- (BOOL) applicationShouldOpenUntitledFile:(NSApplication *)sender 
{ 
    [mainWindowController.window makeKeyAndOrderFront:self]; 
    return NO; 
} 

यह हिस्सा सही है। मैंने अभी इसका परीक्षण किया है।

बस यह सुनिश्चित करें कि यह कक्षा वास्तव में आपका ऐप प्रतिनिधि है।

  1. अपने MainMenu.xib में prefixAppDelegate
  2. नामक एक नया वर्ग है, ओर करने के लिए एक नई वस्तु खींचें और उसे एप्लिकेशन प्रतिनिधि वर्ग
  3. करने के लिए कस्टम वर्ग सही से क्लिक आवेदन और खींचें सेट अपने ऐप प्रतिनिधि ऑब्जेक्ट पर नीचे प्रतिनिधि बनाएं।
  4. अब सिर्फ़ अपने ऐप्लिकेशन प्रतिनिधि वर्ग

में उपरोक्त कोड पेस्ट हैं कि अभी भी मदद नहीं करता है, applicationShouldOpenUntitledFile: में कुछ प्रवेश करने का प्रयास।

इसके अलावा, मैं इस विधि में [mainWindowController.window makeKeyAndOrderFront:self]; सेट न करने की अनुशंसा करता हूं। आपको ऐप प्रतिनिधि विधि applicationDidFinishLaunching: विधि का उपयोग करना चाहिए।

+0

applicationShouldOpenUntitledFile को कॉल नहीं किया जाता है और इसके बजाय iCloud फ़ाइल विंडो (मूल प्रश्न में फोटो) खोला जाता है। यदि मैं क्षमताओं में iCloud अक्षम करता हूं, तो सब कुछ अपेक्षित कार्य करता है। लेकिन मुझे iCloud कार्यक्षमता की आवश्यकता है और इस फ़ाइल को पॉप अप स्क्रीन को बाईपास करें। – coolcool1994

-1

मैं एक समान समस्या में भाग गया - यह पता चला कि मेरे मामले में, मुझे कुंजी और CFBundleDocumentTypes सरणी में मेरी Info.plist से मूल्य को हटाना पड़ा। केवल तभी applicationShouldOpenUntitledFile: विधि कॉल की जाएगी और इस प्रकार मुझे iCloud/दस्तावेज़ विंडो को खोलने से रोकने की अनुमति मिलती है।

+0

इसे अक्षम करने से दस्तावेज़-आधारित ऐप को काम करना बंद कर देता है। – coolcool1994

0

मेरा अवलोकन और फिक्स: [applicationShouldOpenUntitledFile:] निष्पादित नहीं किया जाएगा, सिवाय इसके कि आप * -info.plist से कुंजी NSDocumentClass हटा दें। लेकिन यह हानिकारक है यदि आपका ऐप दस्तावेज़ आधारित एप्लिकेशन है, तो यह आपके द्वारा लिंक किए गए दस्तावेज़ प्रकार को नहीं खोल पाएगा। एक साथ

मेरे ठीक -(void)applicationWillFinishLaunching:(NSNotification *)notification विधि में सीधे अपने कस्टमाइज़्ड विंडो खोलने है (अनुप्रयोग प्रतिनिधि)

ETDocumentWindowController *windowController = (ETDocumentWindowController*)get your own window controller here...; 
[windowController.window makeKeyAndOrderFront:nil]; 
iCloud

10.8 में, के लिए

2

https://developer.apple.com/library/prerelease/content/releasenotes/AppKit/RN-AppKitOlderNotes/index.html

NSDocument समर्थन NSDocument आधारित अनुप्रयोगों iCloud दस्तावेज़ प्रबंधन की सुविधा के लिए सर्वव्यापी-कंटेनर-पहचानकर्ता एंटाइटेलमेंट नई कार्यक्षमता और यूआई प्राप्त करते हैं।

जब iCloud सक्षम है और कोई एप्लिकेशन पहले लॉन्च या पुनः सक्रिय किया गया है और कोई नया शीर्षक नहीं दिखाया जा रहा है या पुनर्स्थापित नहीं किया गया है, तो एक नया शीर्षक रहित दस्तावेज़ बनाने के बजाय, NSDocumentController उपयोगकर्ता के iCloud लाइब्रेरी को दिखाते हुए एक गैर-मोडल ओपन पैनल प्रदर्शित करेगा।

...

आवेदन किसी भी या उनके NSDocument उपवर्गों के सभी के लिए इन सुविधाओं का उपयोग करने के लिए ओवरराइड कर सकते हैं + [NSDocument usesUbiquitousStorage] और कोई वापसी नहीं चाहते कि। यदि सभी एप्लिकेशन की घोषित एनएसडी दस्तावेज़ उपखंड इस विधि से वापस नहीं लौटाते हैं, तो NSDocumentController कभी भी नया गैर-मोडल ओपन पैनल नहीं दिखाएगा।

तो तुम इस रिलीज नोट में सूचीबद्ध सुविधाओं, return NO+[NSDocument usesUbiquitousStorage] पर का उपयोग कर छोड़ देना कर सकते हैं। मैंने पुष्टि की है कि आप अपनी फ़ाइल को सामान्य संवाद से iCloud संग्रहण में अभी भी खोल/सहेज सकते हैं।

+1

यह काम नहीं करता है। उपयोग UbiquitousStorage एक गेटर चर है। आप इस विधि को ओवरराइड नहीं कर सकते हैं या इसे सेट नहीं कर सकते हैं। और यदि आप इसे किसी भी तरह अक्षम करते हैं तो यह iCloud को अक्षम कर देगा। मुझे iCloud सक्षम के साथ इस स्क्रीन को बाईपास करने का एक तरीका चाहिए। – coolcool1994

+0

@ coolcool1994 यदि आप अपने एनएसडी दस्तावेज़ वर्ग को परिभाषित करते हैं, तो आप निश्चित रूप से इसे ओवरराइड करने में सक्षम हैं। जैसा कि मैंने टिप्पणी की थी, मैं अभी भी iCloud का उपयोग कर सकता था, लेकिन इस पर नियंत्रण करने के लिए छिपे हुए पैराम हो सकते हैं जिन्हें मैं नोटिस नहीं कर सका। मैंने इसे योसामेट पर सिएरा में चेक किया। – ioue

1

अपने ऐप प्रतिनिधि में कोड नीचे डालने से आप iCloud को नई दस्तावेज़ स्क्रीन पॉप अप कर सकते हैं। उच्च सिएरा के लिए परीक्षण किया।

-(void)applicationDidFinishLaunching:(NSNotification *)notification 
{ 
    // Schedule "Checking whether document exists." into next UI Loop. 
    // Because document is not restored yet. 
    // So we don't know what do we have to create new one. 
    // Opened document can be identified here. (double click document file) 
    NSInvocationOperation* op = [[NSInvocationOperation alloc]initWithTarget:self selector:@selector(openNewDocumentIfNeeded) object:nil]; 
    [[NSOperationQueue mainQueue] addOperation: op]; 
} 

-(void)openNewDocumentIfNeeded 
{ 
    NSUInteger documentCount = [[[NSDocumentController sharedDocumentController] documents]count]; 

    // Open an untitled document what if there is no document. (restored, opened).  
    if(documentCount == 0){ 
     [[NSDocumentController sharedDocumentController]openUntitledDocumentAndDisplay:YES error: nil]; 
    } 
} 
संबंधित मुद्दे