gpt4 book ai didi

ios - 使用 NSString 创建 NSMutableDictionary

转载 作者:行者123 更新时间:2023-11-29 02:42:21 25 4
gpt4 key购买 nike

我想用 NSString 创建一个 NSMutableDictionnary

-(NSMutableDictionary *)getList{
//Declaration d'un objet SQLITE
sqlite3 *database;

//Declaration de notre String qui sera retourne
NSMutableDictionary *aromaArray = [[NSMutableDictionary alloc] init];

// Ouverture de la base de donnees
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) {

//Chaine de caracteres de la requete
const char *sqlStatement = "SELECT name_fr FROM aroma_huiles";

//Creation de l'objet statement
sqlite3_stmt *compiledStatement;

//Compilation de la requete et verification du succes
if(sqlite3_prepare_v2(database, sqlStatement, -1, &compiledStatement, NULL) == SQLITE_OK) {

// Creation d'un dictionnaire des noms de colonnes
NSDictionary *dictionary = [self indexByColumnName:compiledStatement];
//char **final = malloc(4096 * sizeof(*final));
NSMutableArray *array = [[NSMutableArray alloc] init];

while(sqlite3_step(compiledStatement) == SQLITE_ROW) {

//Assigne la valeur dans la chaine de caracteres
char *tab;
tab = (char*)sqlite3_column_text(compiledStatement, [[dictionary objectForKey:@"name_fr"] intValue]);
NSString *final = [NSString stringWithUTF8String:tab];
if (final != nil) {
NSString *firstLetter = [final substringToIndex:1];
[aromaArray setObject:final forKey:firstLetter];
}
}
}
else {
//Envois une exception en cas de probleme de requete
NSAssert1(0, @"Erreur :. '%s'", sqlite3_errmsg(database));
}

// Finalisation de la requete pour liberer la memoire
sqlite3_finalize(compiledStatement);

}
else {
//Envois une exception en cas de probleme d'ouverture
NSAssert(0, @"Erreur d'ouverture de la base de donnees");
}
//Fermer la base de donnees
sqlite3_close(database);

//Retourne la valeur
return aromaArray;

我认为这是最简单的方法,只有两行,但它仍然拒绝它:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFString count]: unrecognized selector sent to instance 0x1093180c0'

最佳答案

您看到的是您的 array 变量在其边界之外被访问。索引 66 之后根本没有元素,因为它只包含 67 个元素。

array 上迭代时,您正在使用难以阅读的循环结构。在您的情况下,您可以将循环转换为使用 for 构造,而不是 while :

for (int j = 0; j < [array count]; j++) {
...
for (int i = 0; i < [array count]; i++) {
...
}
}

这样做就不需要再将 i 重置为 0 也不需要增加 ij 在循环头之外(删除循环底部的 i++j++ 语句)。

关于ios - 使用 NSString 创建 NSMutableDictionary,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25601191/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com