Файл sqlite не заполняет tableView - он работает с простыми данными, хотя -?(sqlite, основные данные, предварительно заполненные данные) - PullRequest
0 голосов
/ 30 октября 2011

У меня есть хорошо заполненный файл sqlite, который я скопировал в свой проект (в папку и в окно проекта xcode)

Когда я проверяю файл sqlite с Терминалом, он работает нормально, в моем файле sqlite есть нужные данные.

Но затем я пытаюсь заполнить свой tableView данными из файла sqlite, но tableView по-прежнему пуст.

Подскажите, пожалуйста, где мне посмотреть?

Сначала я попытался с некоторыми данными, и это работает (что прокомментировано в applicationDidFinish ...), но с моим файлом sqlite это не работает:

вот мой код: (и вот URL-адрес учебника: http://www.raywenderlich.com/980/core-data-tutorial-how-to-preloadimport-existing-data)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {    

    NSManagedObjectContext *context = [self managedObjectContext];

    /*
    THIS WORKS :
    FailedBankInfo *failedBankInfo = [NSEntityDescription insertNewObjectForEntityForName:@"FailedBankInfo" 
                                                                   inManagedObjectContext:context];
    failedBankInfo.name = @"the name";
    failedBankInfo.city = @"the city";
    failedBankInfo.state = @"the state";

    FailedBankDetails *failedBankDetails = [NSEntityDescription insertNewObjectForEntityForName:@"FailedBankDetails"
                                                                         inManagedObjectContext:context];

    failedBankDetails.closeDate = [NSDate date];
    failedBankDetails.updatedDate = [NSDate date];
    failedBankDetails.zip = [NSNumber numberWithInt:12345];

    failedBankInfo.details = failedBankDetails;
    failedBankDetails.info = failedBankInfo;

    NSError *error;
    if (![context save:&error]){
        NSLog(@"%@,", [error localizedDescription]);
    }

    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"FailedBankInfo" 
                                              inManagedObjectContext:context];
    [fetchRequest setEntity:entity];
    NSArray *fetchedObjects = [context executeFetchRequest:fetchRequest error:&error];
    for (FailedBankInfo *info in fetchedObjects){
        NSLog(@"name : %@", info.name);
        FailedBankDetails *details = info.details;
        NSLog(@"zip : %@", details.zip);
    }
    [fetchRequest release];*/

    FailedBanksListViewController *root = (FailedBanksListViewController *)[_navController topViewController];
    root.context = [self managedObjectContext];
    [window addSubview:_navController.view];

    [self.window makeKeyAndVisible];

    return YES;
}

/** Returns the persistent store coordinator for the application.
 If the coordinator doesn't already exist, it is created and the application's store added to it.
 */
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {

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

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

    // Put down default db if it doesn't already exist
    NSString *storePath = [NSString stringWithFormat:@"%@", storeURL];
    NSFileManager *fileManager = [NSFileManager defaultManager];
    if (![fileManager fileExistsAtPath:storePath]) {
        NSString *defaultStorePath = [[NSBundle mainBundle] 
                                      pathForResource:@"FailedBanksCD" ofType:@"sqlite"];
        if (defaultStorePath) {
            [fileManager copyItemAtPath:defaultStorePath toPath:storePath error:NULL];
        }
    }
    NSError *error = nil;
    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {

        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    

    return persistentStoreCoordinator_;
}

Большое спасибо

1 Ответ

2 голосов
/ 30 октября 2011

Мне кажется, что база данных не была скопирована в doc-dir. Вы можете переместить эту часть

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

за пределами этого, если блок:

if (![fileManager fileExistsAtPath:storePath]) {
    ...
}

Вы должны удалить текущую пустую БД из doc-dir перед повторной попыткой (удалить в симуляторе, удалить приложение с устройства и переустановить).

...