在我的应用程序中,我有一个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];
}
但它不起作用。拜托,建议我任何想法。提前谢谢。
阿利克
答案 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。