Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone NSMutableArray仅打印数组中的最后一个元素,而不是整个数据_Iphone_Sqlite_Nsmutablearray_Ios5 - Fatal编程技术网

Iphone NSMutableArray仅打印数组中的最后一个元素,而不是整个数据

Iphone NSMutableArray仅打印数组中的最后一个元素,而不是整个数据,iphone,sqlite,nsmutablearray,ios5,Iphone,Sqlite,Nsmutablearray,Ios5,有人能帮我一下吗?我已经被这个NSMutableArray困了2-3天了。我是Objective-C的初学者,我不知道代码中的错误是什么。在我的程序中,我已经创建了一个sqlite数据库。它包含3个字段,我已经成功地将这些值插入数据库。我正在将这些值从数据库提取到NSMutableArray中并显示这个数组。但问题是只显示最后一个元素,而不是显示整个数据。我不明白为什么它只显示最后一个元素。我将粘贴下面的代码-请任何人检查它并帮助我 - (void)viewDidLoad { NSArr

有人能帮我一下吗?我已经被这个NSMutableArray困了2-3天了。我是Objective-C的初学者,我不知道代码中的错误是什么。在我的程序中,我已经创建了一个sqlite数据库。它包含3个字段,我已经成功地将这些值插入数据库。我正在将这些值从数据库提取到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的值。如何显示?请告诉我解决方案。提前感谢。

每次执行
while(sqlite3\u步骤(语句)==SQLITE\u行)
循环时,您只是在创建一个新的NSMutableArray。事实上你做了两次。将以下行移到while循环外:

todolist2=[[NSMutableArray alloc]init];
然后在while循环中,而不是每次使用以下命令重新创建新数组:

todolist2 = [NSMutableArray arrayWithObjects:mytask,subtask, nil];
而是使用:

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

这些行将把两个字符串添加到数组的末尾。

如果在while中创建了该数组,请在while之前创建它loop@problemchild:谢谢,我明白了@问题儿童:我还有一个疑问。我正在UItableView中显示所有这些项目。现在我想在节中显示这些项目。表示第一节中的第一个数组元素和第二节中的第二个元素,依此类推。你能告诉我怎么做吗?谢谢……我知道了我还有一个疑问。我正在UItableView中显示所有这些项目。现在我想在节中显示这些项目。表示第一节中的第一个数组元素和第二节中的第二个元素,依此类推。你能告诉我怎么做吗?