2012-06-05 19 views
5

मैं एक सैंडबॉक्स मैक ऐप स्टोर ऐप विकसित कर रहा हूं जो उपयोगकर्ता से कहता है कि यह कहां से कहीं से डाउनलोड फ़ाइलों को सहेजता है। (कुछ त्रुटि जाँच बाहर अलग करना) मुझे प्रयोक्ता की ओर फ़ोल्डर पाने के लिए इस कोड है:startAccessingSecurityScopedResource कभी सफलता नहीं देता

NSOpenPanel* openPanel = [NSOpenPanel openPanel]; 
[openPanel setAllowsMultipleSelection:NO]; 
[openPanel setCanChooseDirectories:YES]; 
[openPanel setResolvesAliases:YES]; 
NSInteger result = [openPanel runModal]; 
NSArray* urls = [openPanel URLs]; 
NSURL* folderURL = [urls objectAtIndex:0]; 
NSError* error; 
NSData* bookmakeData = [folderURL bookmarkDataWithOptions:NSURLBookmarkCreationWithSecurityScope 
          includingResourceValuesForKeys:nil 
              relativeToURL:nil 
                error:&error]; 
_saveFolderBookmark = bookmakeData; 

और जब यह इस फ़ोल्डर में एक फ़ाइल स्थानांतरित करने के लिए समय आता है, मैं इस कोड है:

BOOL isStale; 
NSError* error; 
NSURL* saveFolder = [NSURL URLByResolvingBookmarkData:_saveFolderBookmark 
               options:NSURLBookmarkCreationWithSecurityScope 
             relativeToURL:nil 
            bookmarkDataIsStale:&isStale 
               error:&error]; 
BOOL success = [saveFolder startAccessingSecurityScopedResource]; 

// Move the file somewhere else 
NSWorkspace* workspace = [NSWorkspace sharedWorkspace]; 
NSInteger operationTag; 
BOOL copied = [workspace performFileOperation:NSWorkspaceMoveOperation 
             source:[[self getDocumentsFolder] path] 
            destination:[saveFolder path] 
             files:[NSArray arrayWithObject:filename] 
              tag:&operationTag]; 
[saveFolder stopAccessingSecurityScopedResource]; 

यह कहने के लिए बहुत सारे कोड हैं कि स्टार्टएपिंग सिक्योरिटीस्पेड रिसोर्स एनएसयूपेनपैनल से यूएलआर प्राप्त करने के तुरंत बाद या बाद में चलाने में, एनएसयूसर डीफॉल्ट में बुकमार्क डेटा सहेजे जाने के तुरंत बाद सफलता प्राप्त नहीं करता है।

हकों फ़ाइल में अन्य मदों के बीच, मेरे पास है:

<key>com.apple.security.files.bookmarks.app-scope</key> 
<true/> 

क्या इस कोड के साथ गलत है?

+0

क्या आप कोई कंसोल संदेश देख रहे हैं? साथ ही, यह सुनिश्चित करने के लिए कोड-हस्ताक्षर को दोबारा जांचें कि सही तरीके से कॉन्फ़िगर किया गया है। – gaige

+0

आपके उदाहरण में, यह स्पष्ट नहीं है कि खुले पैनल के समाप्त होने के बाद 'urls' सरणी कहां से आती है। – gaige

+0

जब मैंने त्रुटि जांच को हटा दिया तो मैंने यूआरएल प्राप्त करने वाली लाइन को संपादित करने में कामयाब रहे। मैंने इसे फिर से रखा है। लाइन कॉलिंग के आस-पास कंसोल में कोई संदेश नहीं है प्रारंभ करने की सुरक्षा सुरक्षा प्रमाणपत्र। –

उत्तर

8

यह एक बहुत आसान है। आप NSURLBookmarkRreolutionWithSecurityScope के बजाय NSURLBookmarkCreationWithSecurityScope के साथ हल कर रहे हैं। बस उस रेखा को बदलें और इसे काम करना चाहिए।

(यह उसी सत्र के दौरान काम नहीं कर सकता है जहां आप बुकमार्क बनाते हैं, जब आपके पास पहले से ही यूआरएल तक पहुंच है, क्योंकि आप इसे उस मामले में कॉल नहीं करना चाहते हैं। लेकिन बाद में इसे चलाना चाहिए , क्योंकि यह पूरी बात है।)

+0

अब बहुत स्पष्ट है कि यह इंगित किया गया है। आपको आश्चर्य होता है कि दो अलग-अलग स्थिरांक क्यों हैं। धन्यवाद! –

+2

यदि आप इतिहास को देखते हैं, तो यह समझ में आता है। 10.6 में बुकमार्कक्रिएशन और बुकमार्क रेसोल्यूशन झंडे के मूल सेट में कोई अच्छी तरह से मेल खाने वाले जोड़े नहीं थे, इसलिए वे बिटमैस्क मानों के पूरी तरह से स्वतंत्र सेट थे, और एनएसआरएलबुकमार्क क्रिएशनमिनामाइटलमार्क और NSURLBookmarkResolutionWithoutUI के बीच भ्रम की कोई संभावना नहीं थी। लेकिन यह अच्छा होगा अगर उन्होंने कंपाइलर के बारे में आपको चेतावनी देने के लिए कुछ रास्ता जोड़ा, है ना? – abarnert

0

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

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