2010-01-20 18 views
11

पर संसाधनों को सहेजना क्या एप्लिकेशन में बाद में उपयोग के लिए इंटरनेट से अपने आईफोन एप्लिकेशन में एक फ़ाइल (यानी एक एसक्लाइट डेटाबेस फ़ाइल) डाउनलोड करना संभव है?आईआरएल से फाइल डाउनलोड करना और आईफोन

मैं NSURLConnection का उपयोग करने का प्रयास कर रहा हूं, लेकिन फ़ाइल को सहेजने में सक्षम नहीं हूं।

यहाँ है, उदाहरण के कोड मैं कोशिश कर रहा हूँ:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSString *file = [NSString stringWithFormat:@"http://en.wikipedia.org/wiki/Text_file"]; 
    NSURL *fileURL = [NSURL URLWithString:file]; 

    NSURLRequest *req = [NSURLRequest requestWithURL:fileURL]; 
    NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
{ 
    [self.fileData setLength:0]; 
    self.totalFileSize = [NSNumber numberWithLongLong:[response expectedContentLength]]; 
} 

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
     [self.fileData appendData:data];   
} 

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
    NSArray *dirArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSLog(@"%@", [dirArray objectAtIndex:0]); 

    NSString *path = [NSString stringWithFormat:@"%@/blah.text", [dirArray objectAtIndex:0]]; 

    if ([self.fileData writeToFile:path options:NSAtomicWrite error:nil] == NO) { 
     NSLog(@"writeToFile error"); 
    } 
    else { 
     NSLog(@"Written!"); 
    } 
} 
+0

वास्तव में यहां क्या विफल रहता है? – Vladimir

+0

अगर ([self.fileData लिखने के लिए फ़ाइल: पथ विकल्प: NSAtomicWrite त्रुटि: शून्य] == नहीं) { NSLog (@ "writeToFile त्रुटि"); } मुझे "लिखने के लिए त्रुटि त्रुटि" – msk

उत्तर

5

fileData क्या है? यह कैसे परिभाषित और प्रारंभ किया जाता है?

fileData = [NSMutableData data]; 

होना चाहिए कहीं के बाद:

NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self]; 

आप fileData प्रारंभ और स्मृति प्रबंधन नियमों के अनुसार यह बनाए रखने के लिए किया है।

इसे मेरे उत्तर के साथ आज़माएं। यह काम करता हैं!

+0

हां, हेडर फ़ाइल में यह तरीका परिभाषित किया गया है। – msk

+0

मुझे इसे देखने में नहीं देखा गया है ऊपर दिखाया गया है। इसे कहां शुरू किया गया है ??? फ़ाइल डेटा = [एनएसएमयूटेबल डेटा डेटा]; – Jordan

+0

फ़ाइलडेटा को आरंभ करें जैसा कि मैंने अपने उत्तर में देखा है (देखेंडिडलोड में) और यह काम करेगा। – Jordan

4

आप stringByAppendingPathComponent

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"bookdb.sql"]; 
+0

मैं इंटरनेट से डेटाबेस डाउनलोड करना चाहता हूं (कुछ सर्वर पर कहीं भी संग्रहीत) – msk

+0

इससे कोई फर्क नहीं पड़ता, आपको अभी भी ~ – slf

4

साथ पथ का विस्तार एक विधि में इस कोड की कोशिश करो और निष्पादित,

NSURL *url=[NSURL URLWithString:@"http://en.wikipedia.org/wiki"]; 

NSData *dbFile = [[NSData alloc] initWithContentsOfURL:url]; 

NSString *resourceDocPath = [[NSString alloc] initWithString:[[[[NSBundle mainBundle] resourcePath] stringByDeletingLastPathComponent]stringByAppendingPathComponent:@"Documents"]]; 

NSString *filePath = [resourceDocPath stringByAppendingPathComponent:@"Text_file.txt"]; 

[dbFile writeToFile:filePath atomically:YES]; 
+0

दस्तावेज़ निर्देशिका में यूआरएल का विस्तार करना बेहतर है-> NSURL * दस्तावेज़ डायरेक्टरी = [[[NSFileManager डिफ़ॉल्ट प्रबंधक] URLForDirectory: NSDocumentDirectory इनडोमेन: NSUserDomainMask] lastObject]; आप मार्ग प्राप्त करने के लिए [URL पथ] कर सकते हैं – coolcool1994

0

यह आप के लिए उपयोगी हो सकता है की जरूरत है। तो यह रोक/अपने यूआई को अवरुद्ध कर देगा

NSString *stringURL = @"http://www.somewhere.com/thefile.png"; 
NSURL *url = [NSURL URLWithString:stringURL]; 
NSData *urlData = [NSData dataWithContentsOfURL:url]; 
if (urlData) 
{ 
    NSArray  *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 

    NSString *filePath = [NSString stringWithFormat:@"%@/%@", documentsDirectory,@"filename.png"]; 
    [urlData writeToFile:filePath automically:YES]; 
} 

ध्यान दें कि यह एक writeToFile विधि है, तुल्यकालिक है।

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