现在我的问题不是一个而是两个,如下:
应用程序要求:输入员工的详细信息,然后单击“保存”按钮。应在表视图中添加员工的姓名。单击一行,详细信息应显示在详细视图中。
问题1:第一次单击“保存”按钮后,它会显示在表格视图中,但是从下一次单击开始,除非重新启动应用程序,否则不会显示。我的代码如下:
(void)saveDetails{
EmployeeDetailsAppDelegate *appDelegate = (EmployeeDetailsAppDelegate *) [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSManagedObject *newDetails;
newDetails = [NSEntityDescription insertNewObjectForEntityForName:@"Details" inManagedObjectContext:context];
[newDetails setValue:empID.text forKey:@"EmployeeID"];
[newDetails setValue:empName.text forKey:@"EmployeeName"];
[newDetails setValue:empDepartment.text forKey:@"EmployeeDepartment"];
empID.text = @"";
empName.text = @"";
empDepartment.text = @"";
[[appDelegate rootViewController]addNewObject:empName.text];
NSError *error;
[context save:&error];
[self dismissModalViewControllerAnimated:YES];
}
问题2:这基本上不是问题,而是查询。单击表视图中的行时,员工部门将显示在详细信息视图中。现在我想显示员工ID。我怎样才能做到这一点?我的员工部门显示代码是:
(void)tableView:(UITableView *)aTableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if([self.array count]){
dictionary = [self.array objectAtIndex:indexPath.row] ;
if([dictionary objectForKey:@"EmployeeDepartment"]){
[dictionary objectForKey:@"EmployeeDepartment"];
NSString *empDep = [dictionary objectForKey:@"EmployeeDepartment"];
NSLog(@"Dep is %@",empDep);
}
}
detailViewController.detailItem = [NSString stringWithFormat:@"Employee Department: %@",[dictionary objectForKey:@"EmployeeDepartment"]];
self.navigationItem.leftBarButtonItem.enabled = YES;
}
PS:这适用于使用Core数据作为存储空间的iPad。
答案 0 :(得分:1)
当您将核心数据与UITableView一起使用时,您绝对应该使用NSFetchedResultsController及其delegate方法。
如果我理解你的第一个问题,这应该解决它。它将解决您将在以后尝试镜像核心数据对象的数据阵列时遇到的更多问题。我说尝试因为它显然不起作用。
简而言之,NSFetchedResultsController“监视”您要在tableview中显示的核心数据对象,如果对象被更改,它将告诉您的委托,该委托将采取适当的操作(如插入或删除行) 。该文档包含您必须实现的委托方法的完整示例代码。
关于第二个问题:更改DetailViewController以便它可以处理NSManagedObject。无法编辑对象的detailView通常是无用的,所以无论如何你迟早都需要这样做。