2011-10-24 54 views
2

在我的应用程序中,我有一个UITableViewCobtroller,它使用复选标记附件类型创建表视图。表视图加载并正常工作。在didSelectRowAtIndex方法中,我写了在sqlite数据库中添加数据的方法:UITableView和ViewDidLoad方法

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

但它不工作。请给我建议任何想法。提前致谢。

阿利克

+1

马上我注意到第一个代码片段使用kTableName作为表名,第二个代码片段使用kSettingsTableName,这可能是问题的原因。除此之外,我们可能需要更多的细节继续。 –

+1

[super viewDidLoad];作为第一条语句放在viewDidLoad – Narayana

回答

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! – jrturton

+0

谢谢,我更新了答案以反映这一点。 – zakishaheen

+0

谢谢,我更新cellForRowAtIndex和一切工作 –

1

你需要UITableView- scrollToRowAtIndexPath:atScrollPosition:animated:方法的调用。我会把你的UITableViewControllerviewDidAppear:方法。见UITableView Class Reference

相关问题