Каталог устройств - PullRequest
       6

Каталог устройств

0 голосов
/ 27 января 2012

Итак, у меня есть приложение с базой данных.Эта база данных находится в основном комплекте.Но тогда мне нужно удалить эту базу данных и получить новую из Интернета.Насколько я понял, я ничего не могу удалить из комплекта и добавить в него новое, поэтому мне нужно работать с каталогом документов устройства.Но я не знаю, как сделать первую базу данных в каталоге документов, не загружая ее из Интернета.Кто-нибудь может помочь?

Ответы [ 3 ]

0 голосов
/ 27 января 2012

Вы можете легко найти путь к документу с помощью этого

NSString* pathToDocument = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];

Это вернет путь к папке «Документы», у вас есть доступ для чтения и записи данных здесь

0 голосов
/ 27 января 2012

вам нужно получить путь к каталогу документов и поместить туда файл базы данных.вам нужно выполнить все операции чтения / записи в вашем приложении из скопированной базы данных в каталоге документов вашего приложения.

Я использую эти методы для создания копии моей БД в каталоге документов: вам просто нужно вызвать этот метод:

+(BOOL)copyDBFileToDocumentsDirectory:(NSString*)dbFilename overwrite:(BOOL)yesNO

и просто нужно передать имя файла с расширением.

+(NSString*)databaseABSPath:(NSString*)databaseName existsInDocumentsDirectory:(BOOL)existenceStatus
{
    BOOL success = NO;

    NSString *databasePath = nil;

    if(existenceStatus)//documents Directory
    {
        NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDir = [documentPaths objectAtIndex:0];
        databasePath = [documentsDir stringByAppendingPathComponent:databaseName];
    }
    else //from bundle
    {
        NSArray *resourceSeparatedByExtension = [databaseName componentsSeparatedByString:@"."];

        if([resourceSeparatedByExtension count]<2)
        {
            NSLog(@"Problem with database name or extension");
            return nil;
        }

        databasePath = [[NSBundle mainBundle] pathForResource:[resourceSeparatedByExtension objectAtIndex:0] ofType:[resourceSeparatedByExtension objectAtIndex:1]];
    }

    NSFileManager *fileManager = [NSFileManager defaultManager];

    success = [fileManager fileExistsAtPath:databasePath];

    if(!success)
    {
        NSLog(@"Database file does not exist at path");
        return nil;
    }
    else
    {
        return databasePath;
    }


}

+(BOOL)copyDBFileToDocumentsDirectory:(NSString*)dbFilename overwrite:(BOOL)yesNO
{
    NSString *filePath = [mySQLiteDb databaseABSPath:dbFilename existsInDocumentsDirectory:NO];

    NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDir = [documentPaths objectAtIndex:0];
    NSString *databasePath = [documentsDir stringByAppendingPathComponent:dbFilename];

    if(filePath)
    {
        NSError *error = nil;

        if(!yesNO && [[NSFileManager defaultManager] fileExistsAtPath:databasePath])
        {
            NSLog(@"File already exist at path - instruction is not to overwrite");
            return YES;
        }
        else
        {
            [[NSFileManager defaultManager] removeItemAtPath:databasePath error:&error];
        }

        error = nil;

        [[NSFileManager defaultManager] copyItemAtPath:filePath toPath:databasePath error:&error];

        if(!error)
            return YES;

        NSLog(@"Error copying file :\n\n%@\n\nuserinfo:%@\n\nFailure reason: %@\n\n",[error localizedDescription],[[error userInfo] description],[error localizedFailureReason]);
    }
    return NO;
}
0 голосов
/ 27 января 2012

Вы можете связаться с пакетом, запросив путь к ресурсу в пакете. например,

NSString *path =[[NSBundle mainBundle] pathForResource:[self.imagesDict objectForKey:key] ofType:@"png"];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...