2010-11-27 8 views
8

मेरे पास एक NSOpenPanel है। लेकिन मैं इसे केवल पीडीएफ फाइलों को चुनने योग्य बनाना चाहता हूं। मैं इस तरह कुछ ढूंढ रहा हूं:NSOpenPanel setAllowedFileTypes

// NOT WORKING 
NSOpenPanel *panel; 

panel = [NSOpenPanel openPanel]; 
[panel setFloatingPanel:YES]; 
[panel setCanChooseDirectories:YES]; 
[panel setCanChooseFiles:YES]; 
[panel setAllowsMultipleSelection:YES]; 
[panel setAllowedFileTypes:[NSArray arrayWithObject:@"pdf"]]; 
int i = [panel runModalForTypes:nil]; 
if(i == NSOKButton){ 
    return [panel filenames]; 
} 

मुझे आशा है कि कुछबॉबी का समाधान होगा।

उत्तर

22

मैंने देखा कुछ चीजें .. setCanChooseDirectories को NO में बदलें। सक्षम होने पर यह इंगित करता है कि फ़ोल्डर्स मान्य इनपुट हैं। यह संभवतः आपके इच्छित कार्यक्षमता की अपेक्षा नहीं है। संवेदनशील सिस्टम के लिए आप अपने अनुमत फ़ाइल प्रकारों को [NSArray arrayWithObject:@"pdf", @"PDF", nil] में भी बदलना चाहेंगे। runModalForTypes फ़ाइल प्रकारों की सरणी होनी चाहिए। इस तरह देखने के लिए अपने कोड में परिवर्तित करें:

// WORKING :) 
NSOpenPanel *panel; 
NSArray* fileTypes = [NSArray arrayWithObjects:@"pdf", @"PDF", nil]; 
panel = [NSOpenPanel openPanel]; 
[panel setFloatingPanel:YES]; 
[panel setCanChooseDirectories:NO]; 
[panel setCanChooseFiles:YES]; 
[panel setAllowsMultipleSelection:YES]; 
[panel setAllowedFileTypes:fileTypes]; 
int i = [panel runModal]; 
if(i == NSOKButton){ 
    return [panel URLs]; 
} 
+0

धन्यवाद! कोड बहुत अच्छी तरह से काम करता है! –

+0

क्या यह रिसाव फ़ाइल नहीं है? –

+0

@MKatz कैच के लिए धन्यवाद। एआरसी आवंटन के बिना रिलीज के बाद किया जाना चाहिए। मैं इसे arrayWithObjects में बदल दूंगा: –

1

तुम बहुत जवाब के करीब हैं।

सबसे पहले, [panel setCanChooseDirectories:YES] से छुटकारा पाएं ताकि यह परिणामस्वरूप निर्देशिकाओं की अनुमति न दे।

फिर, या तो [panel runModal] को [panel runModalForTypes:nil] बदलने के लिए या [panel setAllowedFileTypes:] करने के लिए कॉल से छुटकारा पाने और इसके बजाय [panel runModalForTypes:] को सरणी गुजरती हैं।

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