Предварительно загруженная база данных с основными данными - PullRequest
0 голосов
/ 27 марта 2012

Я пытаюсь использовать предварительно загруженную базу данных Sqlite для моего универсального приложения, в котором используются основные данные. Используется для работы с iOS 4.3, но не с iOS 5.0+, а я использую Xcode 4.3.

Я посмотрел на ссылку ниже, внес изменения, вернул обратно, но безрезультатно, и теперь предварительная загрузка не работает вообще.

Предварительное заполнение основных данных в iOS 5

проблема coredata nsurl может не отвечать на stringByAppendingPathComponent

Что я делаю не так, я перечислил мой код ниже, любая помощь будет принята с благодарностью. Спасибо за ваше время.

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator 
{

    if (persistentStoreCoordinator != nil) 
    {
        return persistentStoreCoordinator;
    }

    NSString *storePath = [[self applicationDocumentsDirectory] stringByAppendingPathComponent:@"SAP_ECC_DB.sqlite"];
    //NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"SAP_ECC_DB.sqlite"];

     //Set up the store.
     //For the sake of illustration, provide a pre-populated default store.
    NSURL *storeUrl = [NSURL fileURLWithPath:storePath];

    NSFileManager *fileManager = [NSFileManager defaultManager];
    // If the expected store doesn't exist, copy the default store.
    if (![fileManager fileExistsAtPath:storePath]) 
    {
        NSString *defaultStorePath = [[NSBundle mainBundle] pathForResource:@"SAP_ECC_DB" ofType:@"sqlite"];
        if (defaultStorePath) 
        {
            [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
        }
    }
    NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption, [NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];    
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];

    NSError *error;
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:options error:&error]) {
        // Update to handle the error appropriately.
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        exit(-1);  // Fail
    } 



- (NSString *)applicationDocumentsDirectory
{
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *basePath = ([paths count] > 0) ? [paths objectAtIndex:0] : nil;
    return basePath;
    //return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

1 Ответ

2 голосов
/ 27 марта 2012

Иногда, особенно в XCode 4.3, даже если вы добавляете ресурс в список файлов проекта, он не включается в конечный продукт или удаляется по пути без причины.Если у вас возникла проблема, когда ваш продукт не обновляется, не отображается или не работает должным образом по какой-либо причине, убедитесь, что он действительно включен в «Копирование комплекта ресурсов» (иногда даже .m файлы пропадают,они будут находиться в разделе «Источники компиляции» на вкладке «Фазы сборки» вашего проекта.

Это особенно сложно, потому что Core Data создаст новую базу данных, если она не существует, создавая впечатление, будто она не копируется, хотя на самом деле ее вообще не было.

...