J'ai NSTableView avec deux colonnes, et je veux les remplir des entrées de la base de données SQLite.Lire le problème SQLite
cette méthode est de faire requête pour la table
-(void)getPersons
{
NSString *file = [[NSBundle mainBundle] pathForResource:@"persons" ofType:@"db"];
sqlite3 *database = NULL;
if (sqlite3_open([file UTF8String], &database)==SQLITE_OK)
{
NSLog(@"i open database");
sqlite3_exec(database, "select name,age from persons", MyCallback, persons, NULL);
}
sqlite3_close(database);
}
le problème appers dans la méthode MyCallback:
static int MyCallback(void *context, int count, char **values, char **columns)
{
NSMutableArray *persons = (NSMutableArray *)context;
for (int i=0; i < count; i++) {
NSString *columnname = [NSString stringWithUTF8String:columns[i]];
const char *nameCString = values[i];
if ([columnname isEqualTo:@"name"]) {
[persons addObject:[NSString stringWithUTF8String:nameCString]];
}
else {
[ages addObject:[NSString stringWithUTF8String:nameCString]];
}
}
return SQLITE_OK;
}
comment puis-je écrire des entrées "âge" dans NSMutableArray * âges, si je peux attribuer * contexte juste pour un NSMutableArray? (dans ce code, ceci est NSMutableArray * personne)
Sûrement je devrais créer une méthode séparée pour obtenir des entrées d'âge?
merci.
Pourquoi avez-vous besoin de ceux dans 2 baies distinctes? Créez simplement une sous-classe 'NSObject' avec une propriété name et age (encore plus probablement), et ajoutez des instances de cette sous-classe à un seul' NSMutableArray'. Ensuite, vous ne devez pas déranger avec tous ces problèmes. – Joost
peut-être que vous avez un petit exemple de projet? – nukl
cru3l: Ce dont parle JoostK s'appelle un objet modèle. Apple a un guide pour les faire: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ModelObjects/ Un tableau parallèle, qui est ce que votre code essaie de créer, est presque toujours dans le mauvais sens faire quelque chose dans Cocoa, et dans ce cas, il s'avère que c'est aussi une mauvaise façon de le faire dans SQLite. –