Ios 来自表视图控制器的多段
我有一个表视图,其中包含用户可以更新的不同信息。其中之一是飞行员信息。当用户单击这一行时,他们将转到另一个视图控制器,在那里他们填写关于飞行员的信息。姓名、电话号码等 然后,它们可以单击“保存”或“取消”,这两个操作都会将它们返回到上一个表视图控制器。我想做的是让用户能够再次点击飞行员信息,并查看他们刚刚输入的数据,如果他们选择的话,对其进行编辑。我的解决方案是添加另一个segue,并使用以下代码为其提供唯一标识符。pilot是我的核心数据模型中实体的名称,UpdatePlot是我给segue的名称Ios 来自表视图控制器的多段,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我有一个表视图,其中包含用户可以更新的不同信息。其中之一是飞行员信息。当用户单击这一行时,他们将转到另一个视图控制器,在那里他们填写关于飞行员的信息。姓名、电话号码等 然后,它们可以单击“保存”或“取消”,这两个操作都会将它们返回到上一个表视图控制器。我想做的是让用户能够再次点击飞行员信息,并查看他们刚刚输入的数据,如果他们选择的话,对其进行编辑。我的解决方案是添加另一个segue,并使用以下代码为其提供唯一标识符。pilot是我的核心数据模型中实体的名称,UpdatePlot是我给segue的
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@"UpdatePilot"]) {
NSManagedObject *selectedPilot = [self.pilots objectAtIndex:[[self.tableView indexPathForSelectedRow] row]];
PilotViewController *destViewController = segue.destinationViewController;
destViewController.pilot = selectedPilot;
}
}
!
但是,我在使用未声明的标识符“destviewcontroller”时出错。您是指UIViewController吗?有什么我没看到的吗?任何帮助都将不胜感激
#import "PilotViewController.h"
@interface PilotViewController ()
@end
@implementation PilotViewController
- (NSManagedObjectContext *)managedObjectContext {
NSManagedObjectContext *context = nil;
id delegate = [[UIApplication sharedApplication] delegate];
if ([delegate performSelector:@selector(managedObjectContext)]) {
context = [delegate managedObjectContext];
}
return context;
}
@synthesize pilot;
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
if (self.pilot) {
[self.nameField setText:[self.pilot valueForKey:@"pilotName"]];
[self.emailField setText:[self.pilot valueForKey:@"pilotEmail"]];
[self.phoneField setText:[self.pilot valueForKey:@"pilotPhone"]];
[self.insuranceField setText:[self.pilot valueForKey:@"pilotInsurance"]];
}
// Do any additional setup after loading the view.
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
//Code created for cancel and save buttons
- (IBAction)cancel:(id)sender {
[self dismissViewControllerAnimated:YES completion:nil];
}
- (IBAction)save:(id)sender {
NSManagedObjectContext *context = [self managedObjectContext];
if (self.pilot) {
// Update existing Pilot
[self.pilot setValue:self.nameField.text forKey:@"pilotName"];
[self.pilot setValue:self.phoneField.text forKey:@"pilotPhone"];
[self.pilot setValue:self.insuranceField.text forKey:@"pilotInsurance"];
[self.pilot setValue:self.emailField.text forKey:@"pilotEmail"];
} else {
// Create a new pilot
NSManagedObject *newPilot = [NSEntityDescription insertNewObjectForEntityForName:@"Pilot" inManagedObjectContext:context];
[newPilot setValue:self.nameField.text forKey:@"pilotName"];
[newPilot setValue:self.phoneField.text forKey:@"pilotPhone"];
[newPilot setValue:self.insuranceField.text forKey:@"pilotInsurance"];
[newPilot setValue:self.emailField.text forKey:@"pilotEmail"];
}
NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
NSLog(@"Can't Save! %@ %@", error, [error localizedDescription]);
}
[self dismissViewControllerAnimated:YES completion:nil];
}
@end
尝试将类型为id的segue.destinationViewController强制转换为PilotViewController
PilotViewController *destViewController = (PilotViewController *)segue.destinationViewController;
在以前版本的Xcode中,我认为这是一个警告;您的生成设置可能被设置为将所有警告都视为错误。您是否在情节提要中设置了标识符?请检查一次,因为很多人都会犯错误,只是忘记了而已。你是说这个阶段吗?或者视图控制器?是的,我的意思是segue identifier是segue identifier设置为UpdatePilot。您可以按照报告的方式粘贴错误吗?因为在代码段中找不到destviewcontroller所有小写字母。。。另外,请提供一些关于如何导入PilotViewController的信息。我对ios开发相当陌生,不确定强制转换是什么意思,也不知道如何实现这一点,你能提供一些关于如何实现这一点的信息吗?谢谢你的代码片段,做出了这些更改,工作顺利!但是,虽然我不再收到任何错误,但在单击pilot信息、添加信息并返回时,我看不到以前的任何数据。请在PilotViewController中仔细检查您的保存操作方法,以确保您正在或已经为pilot设置NSManagedObject上的相关属性,例如,[pilot setValue:@Maverick forKey:@name],如果用户在名称字段中键入Maverick。另外,请确保在PilotViewController加载时使用[self.pilot valueForKey:@name]预填充名称字段因此,当前值在加载视图时显示。尝试了这两种方法后,我编辑了我的帖子,将PilotViewController.m也包括在内