从appDelegate调用数据时重新加载tableview源

时间:2010-10-16 15:35:16

标签: iphone nsobject uitableview

我有一个基于表的应用程序,它将数据存储在mysql服务器上,它会更新并将数据写入nsdictionary以保持持久性。当您对数据进行更改时,表需要更新。但是,如果我放置[self tableview reloadData],应用程序在选择行时会崩溃。有没有人知道如何使表刷新发生。我是否需要抛弃这个并从数据中创建一个对象并使用它?

感谢。

  -(void) loadData3;{

    MyAppDelegate *AppDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
self.tableDataSource3 = [AppDelegate.data3 objectForKey:@"Rows"];
NSLog(@"AppDelegate.data3 : %@",AppDelegate.data3 );
NSLog(@"self.tableDataSource3 : %@",self.tableDataSource3 );

}

- (void)viewDidLoad {
    [super viewDidLoad]; 
    [self loadData3];
    if(CurrentLevel3 == 0) {
    self.navigationItem.title = @"Family";
}
else 
    self.navigationItem.title = CurrentTitle3;  
}
}


- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];

 }

这是cellForRowAtIndexPath方法。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }

    // Set up the cell...
    NSDictionary *dictionary = [self.tableDataSource3 objectAtIndex:indexPath.row];
    cell.textLabel.text = [dictionary objectForKey:@"Title"];

    return cell;
}

1 个答案:

答案 0 :(得分:0)

我同意reloadData是正确的方法,你需要找到并修复导致崩溃的错误。

以下是两件值得关注的大事:

  1. 确保在更改数据库后立即调用numberOfRowsInSection将返回有效的新值,作为修改表的结果。 (我见过很多人发布了这个问题)。

  2. 在您的cellForRowAtIndexPath方法中仔细查看 。请记住,此方法不仅设置单元格中的数据,还负责回收单元格。我见过许多错误处理的情况 - 当表数据随后被重新加载 - 并且需要回收和重新分配单元格时 - 事情变得混乱。我敢打赌99%你的问题就在这里。