我使用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
??
答案 0 :(得分:0)
有很多方法可以解决这个问题。最快的方法之一是使用NSNotificationCenter
和NSNotification
类。
在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];