Загрузка файла от URL и сохранение к ресурсам на iPhone

Действительно ли возможно загрузить файл (т.е. sqlite файл базы данных) из Интернета в Ваше приложение для iPhone программно для более позднего использования в рамках приложения?

Я пытаюсь использовать 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!");
    }
}
11
задан msk 10 July 2012 в 08:29
поделиться

2 ответа

Что такое FileData? Как он определяется и инициализируется?

  fileData = [NSMutableData data];

должен быть где-то после:

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

Вы должны инициализировать FileData и сохранить его за правила управления памятью.

Попробуйте это с моим ответом. Оно работает!

5
ответ дан 3 December 2019 в 08:55
поделиться

Вам нужно расширить путь с StringbyAppendath POSTCOMPONENT

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"bookdb.sql"];
4
ответ дан 3 December 2019 в 08:55
поделиться