Iphone UITableView和ViewDidLoad方法

Iphone UITableView和ViewDidLoad方法,iphone,ios,uitableview,viewdidload,Iphone,Ios,Uitableview,Viewdidload,在我的应用程序中,我有一个uitableviewcontroller,它创建带有复选标记附件类型的表视图。“表视图”可以正确加载和工作。在DidSelectRowatinex方法中,我编写了在sqlite数据库中添加数据的方法: [self.dataBaseController openSettingsDB]; [self.dataBaseController updateRecordIntoTableNamed:kTableName withField:kSFi

在我的应用程序中,我有一个uitableviewcontroller,它创建带有复选标记附件类型的表视图。“表视图”可以正确加载和工作。在DidSelectRowatinex方法中,我编写了在sqlite数据库中添加数据的方法:

        [self.dataBaseController openSettingsDB];
        [self.dataBaseController updateRecordIntoTableNamed:kTableName withField:kSField1Name fieldValue:newCell.textLabel.text];
        [self.dataBaseController closeDB];
它工作得很好。所以我想要的是从数据库中检索记录的数据,当重新启动应用程序以选择我从sqlite数据库检索到的具有标题的行时

我试过这个:

-(void)viewDidLoad
{
    NSArray *array = [[NSArray alloc] initWithObjects:
                      kCourse1, kCourse2, kCourse3, kCourse4, kCourse5, kCourse6, nil];
    self.list = array;
    [self.dataBaseController openSettingsDB];
    [self.dataBaseController getRowFromTableNamed:kTableName whichRow:kSField1Name];
    self.chosenStr = self.dataBaseController.dataString;
    [lastIndexPath indexAtPosition:[array indexOfObjectIdenticalTo:self.chosenStr]];
    UITableViewCell *cell = [[UITableViewCell alloc] init];
    cell = [self.tableView cellForRowAtIndexPath:lastIndexPath];
    cell.accessoryType = UITableViewCellAccessoryCheckmark;
    [self.tableView reloadData];
    [array release];
    [super viewDidLoad];
}
但它不起作用。请给我一些建议。提前谢谢


Alick

更新答案:

首先,您不应该在
viewdidLoad
中执行此操作。这是一种不好的做法,您应该在
cellforrowatinexpath:
中执行

更多解释:

表尚未加载到
viewDidLoad
中。您必须执行
[self.tableView重载数据]在执行任何其他操作之前。这样做将调用表的委托方法(它不知道有多少个单元格,所以获取任何特定索引路径的单元格是没有意义的)。看

此外:

首先,这是错误的。您正在使用该alloc/init泄漏内存。只要做:

UITableViewCell *cell = nil;
cell = [self.tableView cellForRowAtIndexPath:lastIndexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;

您需要调用
UITableView
-scrollToRowAtIndexPath:atScrollPosition:animated:
方法。我将把它放在
viewdide出现时:
您的
UITableViewController
方法中。请参阅。

我一开始就注意到第一个代码段使用kTableName作为表名,第二个代码段使用kSettingsTableName,这可能是问题的原因。除此之外,我们可能还需要更多的细节;在ViewDidLoad中放置为第一个语句整个(正确)答案可以归结为最后一句话,但是额外的信息还是+1!
UITableViewCell *cell = nil;
cell = [self.tableView cellForRowAtIndexPath:lastIndexPath];
cell.accessoryType = UITableViewCellAccessoryCheckmark;