UITableView和ViewDidLoad方法

时间:2011-10-24 13:22:00

标签: iphone ios uitableview viewdidload

在我的应用程序中,我有一个UITableViewCobtroller,它创建带有checkmark附件类型的表视图。表视图加载并正常工作。在didSelectRowAtIndex方法中,我编写了在sqlite dataBase中添加数据的方法:

        [self.dataBaseController openSettingsDB];
        [self.dataBaseController updateRecordIntoTableNamed:kTableName withField:kSField1Name fieldValue:newCell.textLabel.text];
        [self.dataBaseController closeDB];

效果很好。所以我想要的是从dataBase中检索记录的数据,并在重新启动应用程序时选择具有标题的行,我从sqlite dataBase中检索。

我试过了:

-(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];
}

但它不起作用。拜托,建议我任何想法。提前谢谢。

阿利克

2 个答案:

答案 0 :(得分:4)

更新答案:

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

更多解释:

该表尚未加载到viewDidLoad中。在做其他事情之前你必须做[self.tableView reloadData];。这样做会调用表的委托方法(它不知道有多少个单元格,因此获取任何特定索引路径的单元格没有意义)。见Table View Programming guide.

此外:

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

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

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

答案 1 :(得分:1)

您需要调用UITableView的{​​{1}}方法。我会将- scrollToRowAtIndexPath:atScrollPosition:animated: viewDidAppear:方法用于此UITableViewController。请参阅UITableView Class Reference