2012-01-24 3 views
0

Je suis arrivé à un point où mon application fonctionne parfaitement sur le simulateur mais quand je le charge sur mon iPhone la base de données ne s'enregistre pas. Je sais que j'ai quelque chose de mal avec mon initialisation et la copie de la DB. La base de données n'est pas enregistrée dans l'ensemble d'applications, je suppose. Je voudrais savoir ce que je fais de mal.Base de données SQLite ne copiant pas sur l'iPhone

Je prévois d'éditer les données dans la base de données, donc je voudrais que cela soit pris en compte.

Voici le code:

- (void)applicationDidFinishLaunching:(UIApplication *)application { 

// Use this section to bring in database and populate the array 
dbPath = @"https://stackoverflow.com/users/jr/Documents/projectReference/reference.db"; 
FMDatabase *database = [FMDatabase databaseWithPath:dbPath];  
[database open]; 

// Init the subjects Array 
categories = [[NSMutableArray alloc] init]; 
subjects = [[NSMutableArray alloc] init]; 
quotes = [[NSMutableArray alloc] init]; 
quoteMap = [[NSMutableArray alloc] init]; 

[self copyDatabaseIfNeeded]; 

// Open the database from the users filessytem 
NSLog(@"Going into the while loop for categories"); 
FMResultSet *result_categories = [database executeQuery:@"select distinct category from SUBJECT"]; 

}  

- (void) copyDatabaseIfNeeded { 

//Using NSFileManager we can perform many file system operations. 
NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSError *error; 
NSString *newdbPath = [self dbPath]; 
BOOL success = [fileManager fileExistsAtPath:newdbPath]; 

if(!success) { 

    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"reference.db"]; 
    success = [fileManager copyItemAtPath:defaultDBPath toPath:newdbPath error:&error]; 
    NSLog(@"Database file copied from bundle to %@", newdbPath); 

    if (!success) 
     NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]); 
} else { 

    NSLog(@"Database file found at path %@", newdbPath); 

} 
} 

Répondre

1

votre dir @ statique "/ users/jr/Documents/projectReference/reference.db" à la base de données est erroné dans un contexte iOS. vous devez utiliser la détection de chemin relatif. si vous stockez votre DB au paquet et le copier avec d'autres ressources, il suffit d'utiliser celui-ci:

NSString *path = [[NSBundle mainBundle] pathForResource:@"reference" ofType:@"db" inDirectory:@""]; 

si vous créez DB lors de l'exécution et de le stocker dans des documents, utilisez celui-ci:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectoryPath = [paths objectAtIndex:0]; 
NSString *dbPath = [resourcePath stringByAppendingPathComponent:@"reference.db"] 

ou il suffit de lire à ce sujet here et here.

+0

Merci et cela l'a résolu. – jroyce