2009-10-03 10 views
73

मेरे पास NSURL ऑब्जेक्ट है जो मुझे स्थानीय फ़ाइल (दस्तावेज़ फ़ोल्डर में) का मार्ग देता है। मैं इस फ़ाइल की सामग्री के साथ NSData ऑब्जेक्ट को पॉप्युलेट करना चाहता हूं। dataWithContentsOfURL: का उपयोग करने का प्रयास किया लेकिन यह विफल रहता है। मुझे पता है कि फ़ाइल मौजूद है क्योंकि आईफोन SDK पथ लौटाता है।आईफोन - स्थानीय फ़ाइल के यूआरएल से एनएसडीटा

क्या कोई मुझे बता सकता है कि मैं स्थानीय फ़ाइल के URL से NSData ऑब्जेक्ट कैसे प्राप्त कर सकता हूं?

धन्यवाद।

+0

"लेकिन यह विफल हो जाता है" क्या मतलब है? – Marco

+0

इसका मतलब यह है कि इस बिंदु पर जम जाता है! एक अपवाद देता है। मैं एक वीडियो के डेटा तक पहुंचने की कोशिश कर रहा हूं, जिसका यूआरएल UIImagePickerController – lostInTransit

+0

से मिलता है, ऐसा लगता है कि आप उस ऑब्जेक्ट को पास करने का प्रयास कर रहे हैं जो NURL नहीं है। आप फ़ाइल यूआरएल कैसे प्राप्त कर रहे हैं, क्या आप निश्चित रूप से एक यूआरएल है और एनएसएसटींग नहीं है? – Marco

उत्तर

146
// Given some file path URL: NSURL *pathURL 
// Note: [pathURL isFileURL] must return YES 
NSString *path = [pathURL path]; 
NSData *data = [[NSFileManager defaultManager] contentsAtPath:path];
+1

सामग्रीऑफफ़ाइल फ़ाइल पथ के साथ एक एनएसएसटींग लेता है। मुझे एक NSURL ऑब्जेक्ट मिल रहा है। – lostInTransit

+0

मुझे यकीन नहीं है, लेकिन डिफ़ॉल्ट के बजाय डिफ़ॉल्ट प्रबंधक का उपयोग करके, init थ्रेडिंग समस्याओं का कारण बन सकता है। – carlossless

+2

[NSFileManager दस्तावेज़] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html) यह थ्रेडिंग विचारों के तहत कहने के लिए है: "द थ्रेडिंग विचारों के तहत:" साझा NSFileManager ऑब्जेक्ट के तरीकों को कई धागे से सुरक्षित रूप से बुलाया जा सकता है। " एकमात्र अपवाद वे नोट करते हैं कि यदि आप फ़ाइल प्रबंधक के संचालन से प्रतिनिधि कॉलबैक को संभालने का इरादा रखते हैं; मुझे विश्वास नहीं है कि यहां लागू होता है। – Tim

24

यह काम आप सिर्फ क्या करने की जरूरत प्राप्त करने के लिए:

NSURL *imgPath = [[NSBundle mainBundle] URLForResource:@"search" withExtension:@"png"]; 
NSString*stringPath = [imgPath absoluteString]; //this is correct 

//you can again use it in NSURL eg if you have async loading images and your mechanism 
//uses only url like mine (but sometimes i need local files to load) 
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:stringPath]]; 
UIImage *ready = [[[UIImage alloc] initWithData:data] autorelease]; 
1

सुनिश्चित करें कि आपके स्थानीय यूआरएल से प्रारंभ होता है "फ़ाइल: //" तो आप सिर्फ यह करने के लिए होगा:

NSData *fileData = [NSData dataWithContentsOfFile:fileURL.path]; 
+0

के फ़ाइल इंस्पेक्टर के तहत पा सकते हैं यूआरएल हमेशा संपत्ति-पुस्तकालय के रूप में वापस आ जाता है: //asset/asset.MOV? Id = 095AA9E9-A4F5-4035- 9 ए 21-3CFF04F45C70 और ext = MOV @ahbou –

+0

यह केवल संपत्तियों (फ़ोटो और वीडियो) के लिए मान्य है। ओपी दस्तावेज फ़ोल्डर – ahbou

+0

से एक फ़ाइल के बारे में पूछताछ करता है जब मैं चयनित यूआरएल से डेटा ऑब्जेक्ट बनाते हैं, तो यह मुझे nil @ahbou –

0

swift3 के लिए मैं यूआरएल उपयोगी निम्नलिखित से जवाब मिला

(मैं निम्नलिखित पथ हो रही थी, phonegap प्लगइन का उपयोग कर

फ़ाइल छवि पर कब्जा करने के बाद: ///var/mobile/Containers/Data/Application/B64B06DE-7976-45CF-9BE2-661F0F309A06/tmp/abcded.jpg)

https://stackoverflow.com/a/41043447/6383908

यदि जाने videoURL = यूआरएल (स्ट्रिंग: urlString), videodata = की कोशिश करते हैं? डेटा (सामग्री: एफ: वीडियोURL) { // अलामोफायर का कोड यहां जोड़ें }

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