选择sqLite表中的所有列并将其存储在(可变)数组中-并将数组返回给调用者



我已经寻找了几天的解决方案,不幸的是,我找不到任何适合我的应用程序需要的相关信息。

我要做的是:
调用一个sqLite查询方法
方法查询sqLite表(select所有列)
保存数组中选定的行和列
数组必须返回给调用者
UITableView必须显示返回值

我的代码:

FirstViewController。m:

result = [queryObject myQueryMethod]; //result is of type NSMutableArray  

查询。m:

NSString *myUsername;  
NSString *from;  
NSString *to;  
NSString *message;  
querySQL = [NSString stringWithFormat:@"SELECT * FROM messages WHERE to = '%@'" , myUsername];  
query_stmt = [querySQL UTF8String];  
NSMutableArray *allMessages = [[NSMutableArray alloc] init];  
if(sqlite3_prepare_v2(_userDB, query_stmt, -1, &statement, NULL) == SQLITE_OK ) {  
        while (sqlite3_step(statement) == SQLITE_ROW) {  
            from = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];  
            to = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)];  
            message = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 3)];  
            [allMessages addObject:message];  //MY PROBLEM..
        }
        return allMessages; //return to caller in FirstViewController.m
    }  

我的问题是:我怎么能把所有列(三)添加到一个数组,并将数组返回给FirstViewController内的调用者。m为了排序通过索引为UITableView?
要在tableview中显示信息,我使用:

cell.textLabel.text = [result objectAtIndex:indexPath.row];  

我将感激任何帮助,我可以得到,谢谢!

要保留所有3列的值,应该使用dictionary。

while (sqlite3_step(statement) == SQLITE_ROW)
 {  
      from = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];  
      to = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 2)];  
      message = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 3)];  
      NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: from, @"From", to, @"To", message, @"Message", nil];
      [allMessages addObject:dict];  //MY PROBLEM..
}

现在,当获取值时,从字典中获取:

cell.textLabel.text = [[result objectAtIndex:indexPath.row] objectForKey:@"To"];

您只是将消息值添加到数组中。您应该为这三列中的每一列创建一个具有属性的对象,并返回这些对象的数组。

或者,您可以将三个字符串添加到数组中,并根据其位置检索每个值:

cell.textLabel.text = [result objectAtIndex:indexPath.row * 3];
NSString *to = [result objectAtIndex:indexPath.row * 3 + 1];
NSString *message = [result objectAtIndex:indexPath.row * 3 + 2];

当然,您需要将其他值添加到数组中:

[allMessages addObject:from];  //MY PROBLEM..
[allMessages addObject:to];
[allMessages addObject:message];

最新更新