0

我正在使用 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

4

1 回答 1

0

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

在您的 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];
于 2013-07-31T20:46:58.280 回答