按顺序从SQLite数据库中填充表视图部分的行

3
我是一名有用的助手,可以为您翻译文本。
我有两个视图控制器页面。添加提醒页面包含保存按钮作为导航栏右侧按钮。
我之前遇到了关于查看提醒页面中表格视图部分数量的问题,这取决于添加提醒页面中保存的数量。
我找到了一个解决方案,可以根据保存的提醒数量生成单元格。
以下是代码:
-(NSInteger)numberOfSectionsInTableView:(UITableView *)view
{
NSInteger numTableRecords = -1;
    sqlite3_stmt *statement;
    if (sqlite3_open([self.databasePath UTF8String], &remindersDB) == SQLITE_OK) 
    {
        NSString *sqlStatement = [NSString stringWithFormat: @"select count(*) from reminders"];
        const char *sql = [sqlStatement cStringUsingEncoding:NSUTF8StringEncoding];
        if(sqlite3_prepare_v2(remindersDB, sql, -1, &statement, NULL) == SQLITE_OK) 
        {          
            while(sqlite3_step(statement) == SQLITE_ROW) 
            {
                numTableRecords = sqlite3_column_int(statement, 0);
            }
        }
        else 
        {
            printf("could not prepare statement: %s\n", sqlite3_errmsg(remindersDB));
        }
    }

    else 
    {
        NSLog(@"Error in Opening Database File");
    }
    sqlite3_close(remindersDB);
    return numTableRecords; 
}

现在我的问题是,我能够检索数据,但不是以适当的方式。我的意思是,这是我用来检索数据的代码:

if (cell == nil)
    {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:CellId] autorelease];
        view.backgroundColor = [UIColor clearColor];
        cell.backgroundColor = [[UIColor alloc]initWithPatternImage:[UIImage imageNamed:@"reminderbutton.png"]];

        label1 = [[[UILabel alloc]initWithFrame:CGRectMake(26, 3, 30, 40)]autorelease];
        label1.backgroundColor = [UIColor clearColor];
        label1.textColor = [UIColor whiteColor];

        label2 = [[[UILabel alloc]initWithFrame:CGRectMake(45, 3, 100, 40)]autorelease];
        label2.backgroundColor = [UIColor clearColor];
        label2.textColor = [UIColor whiteColor];

        label3 = [[[UILabel alloc]initWithFrame:CGRectMake(119, 3, 100, 40)]autorelease];
        label3.backgroundColor = [UIColor clearColor];
        label3.textColor = [UIColor whiteColor];

        label4 = [[[UILabel alloc]initWithFrame:CGRectMake(198, 3, 120, 40)]autorelease];
        label4.backgroundColor = [UIColor clearColor];
        label4.textColor = [UIColor whiteColor];

        //Retrieve the values of database
        const char *dbpath = [self.databasePath UTF8String];
        sqlite3_stmt *statement;

        if (sqlite3_open(dbpath, &remindersDB) == SQLITE_OK)
        {
            NSString *querySQL = [NSString stringWithFormat:@"SELECT * from reminders ORDER BY id"];

            const char *query_stmt = [querySQL UTF8String];

            if (sqlite3_prepare_v2(self.remindersDB ,query_stmt , -1, &statement, NULL) == SQLITE_OK)
            {
                if (sqlite3_step(statement) == SQLITE_ROW)
                {
                    NSString *ID = [[[NSString alloc] initWithUTF8String:(const char *) sqlite3_column_text(statement, 0)]autorelease];

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

                    NSString *eventField = [[[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 2)]autorelease];

                    NSString *dateField = [[[NSString alloc]initWithUTF8String:(const char *) sqlite3_column_text(statement, 3)]autorelease];

                    label1.text = ID;
                    label2.text = nameField;
                    label3.text = eventField;
                    label4.text = dateField;
                } 

                sqlite3_finalize(statement);
            }
            sqlite3_close(self.remindersDB);
        }


                    [cell addSubview:label1];
                    [cell addSubview:label2];
                    [cell addSubview:label3];
                    [cell addSubview:label4];

    }

    return cell;

我已经插入了四个提醒,四个单元格已经出现,但问题在于显示方面。
它的显示如下:

enter image description here

我该如何让4个提醒依次显示在4个单元格中,我的意思是第一个提醒显示在第一个单元格中,第二个提醒显示在第二个单元格中,以此类推。
请帮我解决这个问题,提前感谢您的帮助 :)
对不起大家...我在以下链接中找到了解决方法: 检索在sqlite数据库中插入的所有行,并在包含标签子视图的表视图单元格中显示不同部分的标签 抱歉提出这个问题...感谢所有查看此问题的人,如果有用,请使用它
因此,我不会删除这个问题,再见TC :)
2个回答

2

我给你一个建议,试一试。我希望它有效。

做一件事情,在viewDidAppear或者viewWillAppear中从sqlite检索数据并将数据保存在nsmutableArray中。

然后在 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 中返回 [您的数组 count]。

要重新加载表格,尝试使用 [self.tableview reloadData]

我希望这样可以实现。如果需要更多澄清,请告诉我。


一个小疑问,我应该把reload Data语句放在哪里,并且如何显示检索到的数据?我是否可以像以前一样使用标签? - Eshwar Chaitanya
你把背景颜色设置成透明了吗?可以使用标签并添加到单元格的内容视图中。 - sandy
你的单元格问题解决了吗?[self.tableview reloadData] 应该写在保存按钮点击方法中。 - sandy
你今天尽力完成,如果没有完成,我明天再解释。我今天要离开了。再见,祝你一切顺利。 - sandy
实际上,单元格没有出现,视图本身是空白的,有条纹,当然还有添加提醒视图的标题视图。 - Eshwar Chaitanya
显示剩余22条评论

1

要制作具有所需颜色的单元格,只需在代码中编写以下内容

cell.contentView.backgroundColor=[UIColor colorWithPatternImage:@"Give your cell image"]

(UITableViewCell *)tableView:(UITableView *)view cellForRowAtIndexPath:(NSIndexPath *)indexPath方法中,而不是在条件语句内部,你应该将它放在条件语句外部。为什么要在这个方法中进行数据库操作呢?这会减慢你的应用程序速度。如果需要进一步解释,请告诉我。

输出结果与您在上面看到的屏幕截图相同。 - Eshwar Chaitanya
现在我已经做出了更改,我采用了-(void)getData方法并编写了从数据库检索数据的代码,并采用标签在表视图单元格中显示。然后我在viewDidAppear方法中调用了[self getData]方法,然后调用了[self.tableView reloadData],但是单元格没有显示,这就是问题所在,请查看第一个屏幕截图并与其他两个进行比较。 - Eshwar Chaitanya
因为我不知道如何在这个网站上放置zip文件。 - Eshwar Chaitanya
是的,这是我的项目链接,请在有空的时候下载并查看,再次感谢您的耐心等待 :) http://www.filefactory.com/file/c0b8c72/n/EventsReminder.zip - Eshwar Chaitanya
下载链接将会在页面底部。 - Eshwar Chaitanya
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接