2010-10-29 8 views
1

Mon application doit stocker une liste d'aéroports. Cette liste doit être configurée manuellement, c'est-à-dire qu'elle ne provient pas d'un service Web.Stockage des données sur l'iPad

Je pense à créer une base de données de base de données et d'entrer moi-même cette liste. Ce Core db sera ensuite livré avec l'App.

Recommanderiez-vous d'autres façons de procéder? Devrais-je plutôt utiliser un fichier XML ou une autre façon de le faire?

Répondre

2

Vous pouvez utiliser le plist.
Il est très facile d'enregistrer une liste de chaînes ou d'autres données sans utiliser de données de base.
Voir Property List Programming Guide

Par exemple, ce code permettra d'économiser un objet (rootObj) qui peut être un tableau ou un dictionnaire:

NSString *error; 
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]; 
NSString *plistPath = [rootPath stringByAppendingPathComponent:@"yourFile.plist"]; 
NSData *plistData = [NSPropertyListSerialization dataFromPropertyList:rootObj 
                   format:NSPropertyListXMLFormat_v1_0 
                errorDescription:&error]; 
if(plistData) { 
    [plistData writeToFile:plistPath atomically:YES]; 
} 
else { 
    NSLog(@"Error : %@",error); 
    [error release]; 
} 

Il y a une certaine limitation de la classe prise en charge (voir le guide)

2

Plist est une bonne option avec des données limitées, mais si vous avez beaucoup de données, vous devriez utiliser des bases de données. Ils sont bons, fiables et faciles à manipuler. Les changements peuvent être faits facilement et robustes sur diverses plateformes. Principalement ils ont deux méthodes

  • CheckandcretaeDatabase

  • InitialiseDatabase

  • (void) CheckandcreateDatabase

{

BOOL succès;

NSFileManager * fileManager = [NSFileManager defaultManager];

erreur NSError *;

NSArray * paths = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);

NSString * documentsDirectory = [chemins objectAtIndex: 0];

NSString * writableDBPath = [documentsDirectory stringByAppendingPathComponent: @ "A.sqlite"];

succès = [Filemanager fileExistsAtPath: writableDBPath];

si (succès) retour; // La base de données accessible en écriture n'existe pas, donc copiez la valeur par défaut à l'emplacement approprié. NSString * defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: @ "A.sqlite"]; Success = [fileManager copyItemAtPath: defaultDBPath toPath: erreur writableDBPath: & erreur]

if (!succès) {

NSAssert1 (0, @ "Impossible de créer un fichier de base de données accessible en écriture avec le message '% @'.", [erreur localiséeDescription]); }

}

  • (void) initializeDatabase {

NSArray * chemins = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);

NSString * documentsDirectory = [chemins objectAtIndex: 0];

NSString * path = [documentsDirectory stringByAppendingPathComponent: @ "AutoGraphics.sqlite"];

si (sqlite3_open ([path UTF8String], base de données &) == SQLITE_OK)

{

// NSLog (@ "Ok");

}

autre

{

sqlite3_close (base de données);

NSAssert1 (0, @ "Impossible d'ouvrir la base de données avec le message '% s'.", Sqlite3_errmsg (base de données));

}

}

Après cela, u peut lire ur valeur par la base de données avec l'aide de requêtes faciles.

=> La deuxième méthode consiste à stocker l'ensemble de vos données dans des fichiers XML locaux et il suffit de les analyser pour trouver des données selon le besoin ur. C'est aussi facile.

Décidé sur vos besoins et vos compétences.

5

Tout dépend de la quantité de données que vous attendez à obtenir. Pour une petite quantité, utilisez certainement plists - sauvegarder les tracas de la mise en place d'une base de données que vous aurez besoin d'avoir de grandes quantités ou si vous avez besoin de relations différents types de données.

Questions connexes