2012-08-09 12 views
8

मैं कस्टम करने के लिए ब्राउज़र देखने से खींचें आपरेशन संसाधित view.It बर्फ lepoard में अच्छी तरह से काम के पार चलो, लेकिन नहीं।खींचें फ़ाइलें sandbox के साथ माउंटेन शेर में सैंडबॉक्स (__ CFPasteboardIssueSandboxExtensionForPath)

in browser view: 
    NSMutableArray* urls = [[[NSMutableArray alloc] init] autorelease]; 
..............put some NSUrl to urls array.................... 
    [pasteboard writeObjects:[NSArray arrayWithArray:urls]]; 

in my receive custom view: 
    NSArray* pasteboardItems = [pasteboard readObjectsForClasses:[NSArray arrayWithObject:[NSString class]] options:nil]; 
    NSArray* pasteboardItems2 = [pasteboard readObjectsForClasses:[NSArray arrayWithObject:[NSURL class]] options:nil]; 
    NSArray* pasteboardItems3 = [pasteboard readObjectsForClasses:[NSArray arrayWithObject:[NSImage class]] options:nil]; 
    NSLog(@"%@",pasteboardItems); 
    NSLog(@"%@",pasteboardItems2); 
    NSLog(@"%@",pasteboardItems3); 
my log is: 
    2012-08-09 18:33:43.886 iCollage[6885:303] __CFPasteboardIssueSandboxExtensionForPath: error for [/Users/xxxx/Library/Containers/xxxxxxxxxxxx/Data/Downloads/1343902069.jpg] 
    2012-08-09 18:33:44.546 iCollage[6885:303] ("file://localhost/Users/xxx/Library/Containers/xxxxxxxx/Data/Downloads/1343902069.jpg") 
    2012-08-09 18:33:44.547 iCollage[6885:303] ("file://localhost/Users/xxxxx/Library/Containers/xxxxxx/Data/Downloads/1343902069.jpg") 
    2012-08-09 18:33:44.547 iCollage[6885:303]() 

मेरे सवाल यह है:

1.how इस त्रुटि __CFPasteboardIssueSandboxExtensionForPath ठीक करने के लिए, मैं डॉक्स देखें और है.मुझे बजे ensuer मैं फ़ाइल तक पहुँचने की अनुमति के बारे में कुछ भी नहीं मिला गूगल का कहना है,! हो सकता है "startAccessingSecurityScopedResource" मुझे मदद मिलेगी, तो मैं कोशिश की और विफल

2.Why pasteboardItems2 है मूल्य? मैं केवल यूआरएल पेस्टबोर्ड पर लिख नहीं बल्कि string.It मुझे निराश है कि मैं यूआरएल दोनों NSString प्रकार और NSUrl से प्राप्त कर सकते हैं प्रकार! (मैं आईफ़िंडर से एक फ़ाइल खींचने की कोशिश करता हूं, यूआरएल केवल पेस्टबोर्ड में मौजूद होगा, लेकिन पेस्टबोर्ड नहीं है 2)। किसी को पता है क्यों? मुझे लगता है कि पहली समस्या ऑटो तय हो जाएगी जब कोई मुझे इस समस्या को ठीक करने में मदद करेगा।

+0

क्या आपको इस समस्या को ठीक करने का तरीका मिला है? मुझे यह त्रुटि भी मिल रही है :( – Aravindhan

+0

@ अरविंदनर्ववी आप बुकमार्क-स्कोप –

उत्तर

0

आपका pasteboardItems NSString प्रकार के पढ़ने वस्तु, लेकिन आप एक फ़ाइल (jpg एक्सटेंशन के साथ) घसीटा, आप अपने init विधि में NSString प्रकार के लिए रजिस्टर चाहिए:

[self registerForDraggedTypes:[NSArray arrayWithObject:NSPasteboardTypeString]]; 
+0

कोशिश कर सकते हैं जिसने मेरी मदद नहीं की :(... – Aravindhan

1

मेरा मानना ​​है कि Apple जवाब सवाल 1:

महत्वपूर्ण: यद्यपि आप फ़ाइल पथ खींच, सामान्य रूप में समर्थन कर सकते हैं, आप ऐसा करने से जब तक आप यह है कि कुछ कर रहे हैं बचना चाहिए गंतव्य ऐप कभी भी ऐप सैंडबॉक्स में नहीं चलाया जाएगा। यदि आप एनएसएसटींग का उपयोग करते हैं, तो ओएस एक्स को यह जानने का कोई तरीका नहीं है कि उस स्ट्रिंग को पथ के रूप में व्याख्या किया जाना चाहिए; इस प्रकार, ओएस एक्स गंतव्य ऐप के सैंडबॉक्स को पर उस स्थान पर फ़ाइल या निर्देशिका तक पहुंच की अनुमति नहीं देता है। इसके बजाय, एक NSURL, एक बुकमार्क, या एक फ़ाइल नाम पेस्टबोर्ड प्रकार का उपयोग करें। 2 पर सवाल उठाने

WRT, ऐसा लगता है कि आप यूआरएल चिपकाया है तो NSURL वस्तुओं पढ़ने सही होना प्रतीत होता है। हालांकि मुझे लगता है कि आप निम्नलिखित कोड (ऊपर के लिंक से भी) का उपयोग कर खींचने को लागू करना चाहिए:

- (BOOL)performDragOperation:(id <NSDraggingInfo>)sender 
{ 
    NSPasteboard *pboard = [sender draggingPasteboard]; 

    if ([[pboard types] containsObject:NSFilenamesPboardType]) { 
     NSArray *files = [pboard propertyListForType:NSFilenamesPboardType]; 
     int numberOfFiles = [files count]; 
     // Perform operation using the list of files 
    } 
    return YES; 
} 
1

आप इस पक्ष पर generate security-scoped URL bookmark data की जरूरत है, और turn that data back into a URL रिसीवर पक्ष पर। इसके बाद आपको कुछ अन्य सामान करना होगा जब आप वास्तव में यूआरएल तक पहुंचना चाहते हैं; the documentation elaborates

प्राप्त आवेदन, जब एक खिलौने के डिब्बे में चल रहा है, नंगे रास्तों को संभालने में सक्षम नहीं होगा। यह sandboxed होने का एक मुख्य हिस्सा है; आपको उन फ़ाइलों तक पहुंचने के लिए नंगे पथ या उनके संबंधित यूआरएल का उपयोग करने की अनुमति नहीं है जो आपके सैंडबॉक्स कंटेनर में नहीं हैं और आपको उपयोगकर्ता द्वारा स्पष्ट रूप से सौंपा नहीं गया है।

+0

हालांकि यह करने के लिए कई चीजें हैं ... वैसे भी धन्यवाद! –

+0

@AchillesWang आप इसका उपयोग कर सकते हैं इस वर्ग को एक सुरक्षा-स्कोप्ड यूआरएल बुकमार्क बनाए रखने के लिए लपेटें। https://github.com/leighmcculloch/AppSandboxFileAccess –

0

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

तुम बस name और extensions क्षेत्र में भरने की जरूरत है।

यदि आप अपने आवेदन पर खींची गई फ़ाइलों तक पहुंचने के लिए अपनी अनुमति जारी रखना चाहते हैं, तो आप इस वर्ग का उपयोग उस तर्क को लपेटने के लिए कर सकते हैं। https://github.com/leighmcculloch/AppSandboxFileAccess

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