如何清空并重新加载tableview

时间:2013-07-31 20:08:20

标签: objective-c uitableview uikit

我使用MasterDetail模板创建SQL数据库,然后添加和更新记录。我在Detail视图上添加新记录,然后返回以在Master上查看它们。因为我在Detail视图中添加了新记录,所以当我返回Master时需要重新加载数组。我已宣布例如_objects = [[NSMutableArray alloc] init];

第一次添加正常,我回到主人并且有记录。我读过sql表并将其加载到_objects。但是,如果我回到细节然后返回主人,我现在有相同的记录重复。所以,正在发生的事情是数组从第一次起仍然有记录,当我读取SQL时,我第二次添加相同的记录。

所以我尝试使用[_objects removeAllObjects];认为这会将_objects恢复到原来的状态为空并准备从sql表重新加载。但是,这导致以下语句失败:

[self.tableView insertRowsAtIndexPaths:@[indexPath] withRowAnimation:UITableViewRowAnimationAutomatic];

这让我觉得我的上述假设不正确。然后我尝试重置导致其自身语法错误的_object.count=0;,因为setobject不可用。我也试过[self.tableView reloadData];无济于事。 reloadData应该以某种方式引用_objects ??

1 个答案:

答案 0 :(得分:0)

有很多方法可以解决这个问题。最快的方法之一是使用NSNotificationCenterNSNotification类。

在masterViewController中,在viewDidLoad方法 -

-(void)viewDidLoad {
    [super viewDidLoad];
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(reloadTable) name:@"RecordEntryNotification" object:nil];
}

另外,添加此方法:

-(void)reloadTable {
    //This is where you should put your table updating code
    //if you need to reload the array here, do it
    //ie...
    [_objects removeAllObjects];
    [self refreshDataSource]; //whatever method to add records to the array
    //then call this:
    [self.tableView reloadData];        
}

在您的detailView中,您在“创建记录”的方法中 -

//create records method...
[[NSNotificationCenter defaultCenter]postNotificationName:@"RecordEntryNotification" object:nil];