我正在对Core Data 进行一些测试,假设我有一个带有navigationBar 和addButton 的mainViewController。单击 addButton 将打开一个 detailViewController。当我按保存插入新对象时,detailVieController 将关闭并显示插入新数据的表格。我可以想到两种不同的方法来做到这一点。
第一种方法- 传递 ManagedObjectContext 在添加按钮的操作中,我创建了一个新的 detailViewController 的实例,并将 managedObjectContext 传递给它。detailViewController 的保存按钮也是如此,它将负责保存上下文,然后弹出控制器。
这是MainViewController中addButton调用的方法
-(void)addNewObject{
DetailViewController *detVC = [DetailViewController alloc]initWhit:self.managedObjectCOntext];
[self.navigationcontroller pushViewController:detVC animated:YES];
}
该方法由 IngredientViewController 中的保存按钮调用
-(void)saveObject{
NSError *error;
if (![self.managedObjectContext save:&error]){
NSLog(@"Error");
}
}
第二种方法- 使用委托 在 addButton 的操作中,我创建了一个 DetailViewController 实例,我将其设置为委托,因此当我按下 DetailViewCONtroller 中的保存按钮时,将调用将数据传递给主控制器的委托。
这是MainViewController中addButton调用的方法
(void)addNewObject{
DetailViewController *detVC = [DetailViewController alloc]init];
detVC.delegate = self;
[self.navigationcontroller pushViewController:detVC animated:YES];
}
该方法由 IngredientViewController 中的保存按钮调用
-(void)saveObject{
[self.delegate detailVCdidSaveObject];
}
这是在 mainViewController 中实现的委托
detailVCdidSaveObject{
NSError *error;
if (![self.managedObjectContext save:&error]){
NSLog(@"Error");
}
}
------------------------------传递对象
最好将原始数据传递给 DetailViewController 并在那里创建对象,还是最好将对象的实例传递给 DetailViewController 来处理设置其数据?
例如
这样,我将 mainVC 的对象实例链接到一个 DetailVC,这样我就可以轻松设置它的值
-(void)addObject{
DetailViewController *detailVC =[[DetailViewController alloc]init];
detailVC.delegate = self;
self.object = [NSEntityDescription insertNewObjectForEntityForName:@"Object" inManagedObjectContext:self.managedObjectContext];
detailVC.object = self.object;
[self.navigationController pushViewController:detailVC animated:YES];
}
这样我传递原始数据并让detailVC创建实例
-(void)addObject{
DetailViewController *detailVC =[[DetailViewController alloc]initWithName:@"objname"];
[self.navigationController pushViewController:detailVC animated:YES];
}
这些代码只是用于教育目的的伪代码。所有方法都有效,我只想知道您认为哪种方法最正确以及为什么。谢谢