iPhone Core Data не получает никаких данных из Sqlite3 - PullRequest
2 голосов
/ 11 января 2010

Я скопировал заполненный существующий файл sqlite3 в свой проект; найдено (проверяю что с

- (void)createEditableCopyOfDatabaseIfNeeded {
    NSLog(@"Checking if we have to create editable copy of database");

    // First, test for existence.
    BOOL success;
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *error;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"hvw.sqlite"];
    success = [fileManager fileExistsAtPath:writableDBPath];
    if (success) return;
    NSLog(@"Creating editable copy of database");
    // The writable database does not exist, so copy the default to the appropriate location.
    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"hvw.sqlite"];
    success = [fileManager copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
    if (!success) {
        NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
    }
}

Я не захожу в раздел «Создание редактируемой копии базы данных», поэтому файл там и найден.

Но моя выборка не возвращает никаких результатов:

NSFetchRequest *request = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Game" inManagedObjectContext:managedObjectContext];

[request setEntity:entity];

NSError *error;

NSMutableArray *mutableFetchResults = [[managedObjectContext executeFetchRequest:request error:&error] mutableCopy];

Ошибка не выдается, но результирующий массив пуст ...

1012 * редактировать *

Я заменил строку

NSString *documentsDirectory = [paths objectAtIndex:0];

от

NSString *documentsDirectory = [self applicationDocumentsDirectory];

и в файле журнала я вижу ошибку при попытке сохранить или прочитать объекты:

Operation could not be completed. (Cocoa error 256.)

1 Ответ

1 голос
/ 11 января 2010

Была ли эта база данных SQLite создана с использованием Core Data? Вы не можете просто использовать любую базу данных SQLite, которую вы хотите для своего постоянного хранилища, она должна иметь точный внутренний формат, используемый Core Data.

Если это стандартная база данных SQLite, которую вы хотите перенести в Core Data, я рекомендую написать метод миграции, который принимает SQLite и создает из него управляемые объекты Core Data, устанавливая все соответствующие отношения. Когда операция миграции завершена, вы можете записать полученное постоянное хранилище на диск и использовать его для Базовых данных в вашем приложении. Если вы более предприимчивы, вы можете выполнить эту миграцию в фоновом потоке, передавая уведомления для добавления управляемых объектов в контекст управляемого объекта основного потока при их анализе в SQLite.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...