2010-01-11 4 views
2

J'ai copié un fichier sqlite3 existant et rempli dans mon projet; il se trouve (je vérifie que aveciPhone Core Data ne récupère aucune donnée de 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]); 
    } 
} 

Je ne viens pas à la « Création d'une copie modifiable de la base de données » -part, de sorte que le fichier est là et trouvé.

Mais mon aille chercher ne retourne pas résultats:

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]; 

Aucune erreur est renvoyée, mais le tableau qui en résulte est vide ...

modifier

J'ai remplacé la ligne

NSString *documentsDirectory = [paths objectAtIndex:0]; 

par

NSString *documentsDirectory = [self applicationDocumentsDirectory]; 

et dans le fichier journal, je vois erreur en essayant d'enregistrer ou lire des objets:

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

Répondre

1

Était cette base de données SQLite créé en utilisant des données de base? Vous ne pouvez pas utiliser n'importe quelle base de données SQLite pour votre magasin persistant, elle doit avoir le format interne exact utilisé par Core Data. S'il s'agit d'une base de données SQLite standard que vous voulez transférer vers Core Data, je vous recommande d'écrire une méthode de migration qui intègre SQLite et crée des objets gérés Core Data à partir de là, en mettant en place toutes les relations appropriées . Une fois l'opération de migration terminée, vous pouvez écrire sur le disque dur persistant qui en résulte et l'utiliser pour les données de base dans votre application. Si vous êtes plus aventureux, vous pouvez effectuer cette migration sur un thread d'arrière-plan, en passant des notifications pour ajouter des objets gérés au contexte d'objet géré du thread principal car ils sont analysés depuis SQLite.

+0

Je suppose que mon fichier sqlite a la structure dont il a besoin ... Je l'ai fait selon http://ablogontech.wordpress.com/2009/07/13/using-a-pre-populated-sqlite -database-avec-core-data-sur-iphone-os-3-0/ – swalkner

+0

Si je comprends bien ce post, il a créé une base de données vide SQLite à partir de données de base, puis peuplé les données à la main? Cela ne garantit pas que les relations et autres données pour vos éléments seront dans le format attendu par Core Data. –

+0

hmm ... mais comment puis-je utiliser une base de données pré-remplie? – swalkner