मैं एक सैंडबॉक्स मैक ऐप स्टोर ऐप विकसित कर रहा हूं जो उपयोगकर्ता से कहता है कि यह कहां से कहीं से डाउनलोड फ़ाइलों को सहेजता है। (कुछ त्रुटि जाँच बाहर अलग करना) मुझे प्रयोक्ता की ओर फ़ोल्डर पाने के लिए इस कोड है: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/>
क्या इस कोड के साथ गलत है?
क्या आप कोई कंसोल संदेश देख रहे हैं? साथ ही, यह सुनिश्चित करने के लिए कोड-हस्ताक्षर को दोबारा जांचें कि सही तरीके से कॉन्फ़िगर किया गया है। – gaige
आपके उदाहरण में, यह स्पष्ट नहीं है कि खुले पैनल के समाप्त होने के बाद 'urls' सरणी कहां से आती है। – gaige
जब मैंने त्रुटि जांच को हटा दिया तो मैंने यूआरएल प्राप्त करने वाली लाइन को संपादित करने में कामयाब रहे। मैंने इसे फिर से रखा है। लाइन कॉलिंग के आस-पास कंसोल में कोई संदेश नहीं है प्रारंभ करने की सुरक्षा सुरक्षा प्रमाणपत्र। –