0

誰かが私を助けてくれますか?私はこのNSMutableArrayで過去2〜3日間立ち往生しています。私はObjective-Cの初心者ですが、コードのエラーが何であるかわかりません。私のプログラムでは、sqliteデータベースを作成しました。3つのフィールドが含まれ、dbに値を正常に挿入しました。抽出しています。これらの値はデータベースからNSMutableArrayに入力され、この配列が表示されます。ただし、問題は最後の要素のみが表示され、データ全体が表示されないことです。最後の要素だけが表示されている理由がわかりません。以下のコードを貼り付けます-誰かがそれをチェックして私を助けてくれますか?

- (void)viewDidLoad
{

   NSArray *documentPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
   NSString *documentsDir = [documentPaths objectAtIndex:0];

   databasePath = [documentsDir stringByAppendingPathComponent:@"TDL1.db"];

   const char *dbpath = [databasePath UTF8String];

   sqlite3_stmt    *statement;

        if (sqlite3_open(dbpath, &TDLDB) == SQLITE_OK)
         {
                    NSString *querySQL = [NSString stringWithFormat: @"SELECT MYTASK, SUBTASK FROM TDL1 "];

                    const char *query_stmt = [querySQL UTF8String];



      if (sqlite3_prepare_v2(TDLDB, query_stmt, -1, &statement, NULL) == SQLITE_OK)

       {
            while (sqlite3_step(statement) == SQLITE_ROW)
              {
                     todolist2=[[NSMutableArray alloc]init];

                      NSString *mytask = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)];

                      NSString *subtask = [[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 1)];

                   todolist2 = [NSMutableArray arrayWithObjects:mytask,subtask, nil];

                       NSLog(@"THE array is:%@",todolist2);

       } 

                sqlite3_finalize(statement);
}
              sqlite3_close(TDLDB);

}
         NSLog(@"THE outside array is:%@",todolist2);
[super viewDidLoad];

}

そしてコンソールで私は次の出力を得ています:-

2012-09-06 11:33:23.529 TDL[823:f803] THE array is:(
    task0,
    task0
)
2012-09-06 11:33:23.532 TDL[823:f803] THE array is:(
    task1,
    task1
)
2012-09-06 11:33:23.533 TDL[823:f803] THE array is:(
    task2,
    task2
)
2012-09-06 11:33:23.534 TDL[823:f803] THE array is:(
    task3,
    task3
)
2012-09-06 11:33:23.534 TDL[823:f803] THE array is:(
    task4,
    task4
)
2012-09-06 11:33:23.535 TDL[823:f803] THE array is:(
    task5,
    task5
)
2012-09-06 11:33:23.536 TDL[823:f803] THE array is:(
   task6,
   task6
)
2012-09-06 11:33:23.537 TDL[823:f803] THE array is:(
    task6,
    task6
)
2012-09-06 11:33:23.537 TDL[823:f803] THE array is:(
    task7,
    task7
)
2012-09-06 11:33:23.538 TDL[823:f803] THE array is:(
    task7,
    task7
)
2012-09-06 11:33:23.539 TDL[823:f803] THE array is:(
    task8,
    task8
)
2012-09-06 11:33:23.539 TDL[823:f803] THE array is:(
    task9,
    task9
)
2012-09-06 11:33:23.540 TDL[823:f803] THE array is:(
   task10,
   task10
)
2012-09-06 11:33:23.540 TDL[823:f803] THE outside array is:(
   task10,
   task10
)
2012-09-06 11:33:23.541 TDL[823:f803] could not prepare statement: not an error

task0からtask10までの値を表示したいのですが、表示方法を教えてください。解決策を教えてください。よろしくお願いします。

4

1 に答える 1

1

while (sqlite3_step(statement) == SQLITE_ROW)ループを通過するたびに、新しい NSMutableArray を作成しているだけです。実際、あなたは1つを2回作っています。次の行を while ループの外に移動します。

todolist2=[[NSMutableArray alloc]init];

次に、毎回新しい配列を再作成する代わりに、while ループ内で次のようにします。

todolist2 = [NSMutableArray arrayWithObjects:mytask,subtask, nil];

代わりに次を使用します。

[todolist2 addObject:myTask];
[todolist addObject:subTask];

これらの行は、配列の末尾に 2 つの文字列を追加します。

于 2012-09-06T06:25:43.140 に答える