Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 来自表视图控制器的多段_Ios_Objective C_Uitableview - Fatal编程技术网

Ios 来自表视图控制器的多段

Ios 来自表视图控制器的多段,ios,objective-c,uitableview,Ios,Objective C,Uitableview,我有一个表视图,其中包含用户可以更新的不同信息。其中之一是飞行员信息。当用户单击这一行时,他们将转到另一个视图控制器,在那里他们填写关于飞行员的信息。姓名、电话号码等 然后,它们可以单击“保存”或“取消”,这两个操作都会将它们返回到上一个表视图控制器。我想做的是让用户能够再次点击飞行员信息,并查看他们刚刚输入的数据,如果他们选择的话,对其进行编辑。我的解决方案是添加另一个segue,并使用以下代码为其提供唯一标识符。pilot是我的核心数据模型中实体的名称,UpdatePlot是我给segue的

我有一个表视图,其中包含用户可以更新的不同信息。其中之一是飞行员信息。当用户单击这一行时,他们将转到另一个视图控制器,在那里他们填写关于飞行员的信息。姓名、电话号码等 然后,它们可以单击“保存”或“取消”,这两个操作都会将它们返回到上一个表视图控制器。我想做的是让用户能够再次点击飞行员信息,并查看他们刚刚输入的数据,如果他们选择的话,对其进行编辑。我的解决方案是添加另一个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也包括在内