我正在使用实体“客户”和属性“名称”测试一个简单的核心数据项目。我正在使用主从模板的修改版本;Master包含名称的tableview,detail用于输入名称。
在 Master 的 prepareForSegue 中,我将 Details 的 Customer 对象设置如下:
...
else if ([segue.identifier isEqualToString:@"Add Customer"]) {
[[segue destinationViewController] setDelegate:self];
[[segue destinationViewController] setCust:(Customer *) [NSEntityDescription insertNewObjectForEntityForName:@"Customer"inManagedObjectContext:self.managedObjectContext]];
}
Master的insertNewObject添加了一个通用名称:
...
[newManagedObject setValue:sender forKey:@"name"];
...
详细来说,名称是通过委托添加的:
- (IBAction)save:(UIBarButtonItem *)sender {
self.cust.name = self.customerName.text;
[self.delegate addNameController:self selectedSave:YES];
Master的委托方法:
- (void)addNameController:(AddNameController *)controller selectedSave:(BOOL)save {
if (!save) {
[self.managedObjectContext deleteObject:controller.cust];
}
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
[self dismissViewControllerAnimated:YES completion:nil];}
这一切都很好,并且 tableview 为所有新名称条目正确更新,除了任何条目,排序明智,成为第一个条目。在这种情况下,虽然名称被添加到数据库中,但在 tableview 的第一行中放置了一个空白条目。我可以通过点击“编辑”按钮或添加一个新名称来显示该名称,该名称排序在不可见名称之前。
为了解决这个问题,我强制在 Master 中重新加载:
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.tableView reloadData];}
这对我来说似乎有点骇人听闻。据我了解,Core Data 将负责正确更新显示以响应任何内容更改。
我的实现方式是否存在问题,或者这是 Core Data 的特质?
谢谢。