2013-11-23 79 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

相關問題