2013-11-23 46 views
1

我的SQLite数据库,并与查询导出一些结果保存在一个文件中的NSMutableArray所有内容的iOS

sqlite3 *MyDB; 
const char *dbpath = [StringPathDB UTF8String]; // Convert NSString to UTF-8 
NSString *querySQL = @"select * from chat order by id desc limit 20"; 



if (sqlite3_open(dbpath, &MyDB) == SQLITE_OK) 
{ 

    const char *sql = [querySQL UTF8String]; 

    sqlite3_stmt *searchStatement; 

    if (sqlite3_prepare_v2(MyDB, sql, -1, &searchStatement, NULL) == SQLITE_OK) 
    { 
     while (sqlite3_step(searchStatement) == SQLITE_ROW) 
     { 
      NSString *nickname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchStatement, 0)]; 
      NSString *time = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchStatement, 1)]; 
      NSString *text = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchStatement, 2)]; 

然后我把所有的NSMutableArray

NSMutableArray *list = [[NSMutableArray alloc] init]; 

[list addObject:nickname]; 
[list addObject:time]; 
[list addObject:text]; 

当我试图挽救人的文件与此代码

for(int i = 0; i < [list count]; i++) { 

        NSLog(@"%@",list); 
        [list writeToFile:filePATH atomically:YES]; 
        break; 
       } 

它在NSLog中正确邮戳,但在文件只保存最后一个记录不是所有阵列年。 请帮帮我!

+1

什么是'filePATH'?你是如何创建它的? – Undo

+0

是否所有在'list'由'NSLog()'验证? – zaph

+1

您需要实际积累所有记录才能将它们全部写入。您的列表将只包含一条记录。 (如果你写了多个记录,就没有什么可以将它们分开,你需要重新考虑你想要做什么。) –

回答

0

您需要创建一次NSMutableArray并对其进行全部添加。

NSMutableArray *list = [[NSMutableArray alloc] init]; 
while (sqlite3_step(searchStatement) == SQLITE_ROW) 
{ 
    NSString *nickname = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchStatement, 0)]; 
    NSString *time = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchStatement, 1)]; 
    NSString *text = [NSString stringWithUTF8String:(char *)sqlite3_column_text(searchStatement, 2)]; 
    [list addObject:nickname]; 
    [list addObject:time]; 
    [list addObject:text]; 
    ... 
} 
[list writeToFile:filePATH atomically:YES]; 
+0

谢谢......你的解决方案工作正常!我可以在一行中有三个元素的地方写文件吗?现在的结果是 行昵称1个 时间一个元素1个 文本1个 昵称2 时间2 文本2 ... 我想: 昵称1次1文本1 昵称2时2文本2 .... 这是可能的吗? – user3025315

+0

你可以编写代码来创建一个新的'NSMutableArray',按你想要的顺序访问当前数组,并将这些项添加到新数组中。但是,阵列可能是最好的传讯方式,只需根据需要进行访问即可。 – zaph

+0

任何样品?谢谢 – user3025315

相关问题